2011-11-13 50 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() { 
    // ... 
});