为什么$('#table> tr')选择器不匹配? (总是返回0)

时间:2012-05-06 01:54:36

标签: jquery jquery-selectors

html代码:

<table id='table'>
    <tr>
        <td>..</td>
    </tr>
</table>

使用jquery的js代码:

var l1 = $('#table > tr').length;
var l2 = $('#table tr').length;
alert(l1+','+l2);​

结果:

 0,1

为什么第一个#table > tr得到0?

您可以在此处看到现场演示:http://jsfiddle.net/Freewind/PmsFQ/

3 个答案:

答案 0 :(得分:14)

因为<table>的直接子女只能是<thead><tbody><tfoot>(或<colgroup><caption>,但那些不包含行。)

浏览器的DOM将隐式地将迷路<tr>包裹在<tbody>中。 (对于不这样做的浏览器,jQuery会伪造它)

您需要撰写$('#table > tbody > tr')

答案 1 :(得分:3)

这是因为浏览器会自动在<tbody><table>之间插入<tr>元素,这样行就不再是您桌子的直接子节点了。

答案 2 :(得分:2)

您的浏览器正在添加tbody元素,因此tr不是该表的子级。