2011-11-13 84 views
4

您好我想只通過頂層迭代的標籤意味着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> 

如果我使用過的所有TR標籤迭代下面的代碼

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

但我想通過我與>標記。你可以使用下面的小提琴把手放在提到的S迭代
http://jsfiddle.net/AzJRp/1/

+1

同一個問題: http://stackoverflow.com/questions/977883/selecting -only-first-level-elements-in-jquery –

回答

4

有些瀏覽器將 「糾正」 自己的HTML中包括<tbody>

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

如果可能的話,添加<tbody>到HTML自己,那麼你就可以可靠地使用:

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

演示:http://jsfiddle.net/Qw2CJ/

如果您自己沒有插入<tbody>$('#tab1 > tr')可以在某些瀏覽器中工作,而其他人則需要$('#tab1 > tbody > tr')。如果您自己添加<tbody>,則可以在任何地方使用相同的簡單CSS選擇器。

+0

是的主人..我很高興有你的迴應.. HTML是由我們有一個骯髒的工具生成..我不能添加靜態...生成骯髒的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() { 
    // ... 
});