2011-11-13 13 views
4

のHiのタグはtable.Belowの子タグを意味することは、私のHTML私はトップレベルのみを反復処理するテーブル

<table id="tab1"> 
     ---> <tr> 
        <td> 
        <table> 
         <tr><td></td></tr> 
         <tr><td></td></tr> 
        </table> 
        </td> 
      </tr> 
     ---> <tr><td></td></tr> 
     ---> <tr><td></td></tr> 
</table> 

です以下のコード

$('#tab1 tr').each(function() 
    { 
     // This will iterate through all the <tr> (5 tags).. 
    }); 

しかし、私は>マークと言及しているのを反復処理したい..あなたが
http://jsfiddle.net/AzJRp/1/

上に手を置くために、以下のフィドルを使用することができます
+1

同じ問題をここで説明する: http://stackoverflow.com/questions/977883/selecting最初のレベル要素jquery –

答えて

4

一部のブラウザは<tbody>を含めるようにHTMLを "修正" します:

<table id="tab1"> 
    <tbody> 
     <tr> 
      <td> 
       <!-- ... --> 
      </td> 
     </tr> 
    </tbody> 
</table> 

可能であれば、あなたのHTMLに自分自身を<tbody>を追加し、あなたが確実に使用することができます。

$('#tab1 > tbody > tr').each(function() { 
    // ... 
}); 

デモ:http://jsfiddle.net/Qw2CJ/

自分で<tbody>を挿入しないと、$('#tab1 > tr')は一部のブラウザでは動作し、他のブラウザでは$('#tab1 > tbody > tr')<tbody>を自分で追加すると、同じシンプルなCSSセレクタをどこでも使用できます。

+0

はいマスター..私はあなたの応答を持ってうれしいです..私たちが持っているダーティツールの1つによってHTMLが生成されています。を静的に追加することはできません...それはそれ以外の場合は、を

の内容に置き換えてコードを進めることができます。 – Exception

+1

@ user1008575:まず、私は誰の幹部だが、とにかく感謝しています。あなたが '$( '#tab1> tbody')。length'をチェックして' $( '#tab1')を使うと、 '

'を挿入できるはずですwrapInner( '' ) '' $( '#tab1> tbody')。lengthがゼロの場合に ''を追加します。それはうまくいくはずです。 –

0

これは動作します:上記の回答/コメントに基づいて

$("#tab1 > tbody > tr").each(function(index, value) { 
    //this iterates through only 3 elements. 
}); 
1

は、私はほとんどのブラウザはTBODYタグを追加することを理解します。私はtbodyをプログラムで選択して、セレクタ'#tab1> tbody> tr'と動作させるようにプログラムを追加することをお勧めしません。

Multiple selectorを使用して問題を解決するとよいでしょう。 (私はそれをテストしていない誰かがそれをテストし、答えを変更したり、ここでコメントが追加されますことを願っています。。)

$('#tab1 > tbody > tr , #tab1 > tr').each(function() { 
    // ... 
});