我有一张表:
<table id="table">
<tbody>
<tr></tr>
<tr>
<td>
<table>
<tbody>
<tr></tr>
</tbod>
</table>
</td>
</tr>
</tbody>
</table>
我正在使用jQuery,并且存在一个存储的选择器来获取最外层的表:
var x = $('#table')
从那开始如果想要获得所有第一级 <tr>
- 元素。
如果我使用其中一个:
x.find('tbody > tr');
x.children('tbody').children();
...第一个也会自然地选择所有嵌套的<tr>
- 元素。后者似乎过于复杂,涉及多个查询。
有没有办法让这更快/更有效?
答案 0 :(得分:2)
首先,x.find('tbody > tr')
会找到所有<tr>
。您需要执行x.find('> tbody > tr')
,假设您的示例中x
为x
。
我和两个人都进行了测试,这是我的发现。
.children(): 3.013ms
>: 0.626ms
因此>
方法比.children()
方法快。函数调用加起来......几乎没有。
这是我用于测试的JavaScript。
var $table = $('#table'), $usingChildren, $usingAngleBracket;
console.time('.children()');
$usingChildren = $table.children('tbody').children('tr');
console.timeEnd('.children()');
console.time('>');
$usingAngleBracket = $table.find('> tbody > tr');
console.timeEnd('>');
console.log( $usingChildren, $usingAngleBracket );
答案 1 :(得分:1)
获得direct children
parent
的最快方式是.children
,所以您可以做的是:
$('tbody').children('tr')
.find()
也会搜索child of child
,因此您可能不想使用它。
答案 2 :(得分:0)
使用可以使用jQuery的.first()
方法查找第一个<tr>
元素,
$('#mytable tr').first()
虽然您希望找到包含 嵌套 子元素的第一个<tr>
,但您可以使用.has()
对其进行过滤。例如:http://jsfiddle.net/cwL4q/3/
$("#mytable tr").has('tbody').first().css("background-color", "red" );
虽然,我强烈建议只使用一个类标记'嵌套'<tr>
,然后您可以更快地访问它们,如您所知。
$('.nestedrow');
对于以下HTML:
<table id="table">
<tbody>
<tr></tr>
<tr class="nestedrow">
<td>
<table>
<tbody>
<tr></tr>
</tbod>
</table>
</td>
</tr>
</tbody>
</table>