jquery说tbody.length = 1,即使没有标签

时间:2013-08-13 12:57:41

标签: jquery html

我有一个非常简单的表格,其中包含最少的html标签,例如:

<table id="test">
    <tr><td>some table cell</td></tr>
</table>

我正在尝试检查标签是否存在。奇怪的是:jquery说“是的,有一个tbody标签”,即使我没有定义一个!这里发生了什么?

$('table#test').each(function(){

    var tbody = $(this).find('tbody');

    //how can there be a tbody when there is no <tbody> tag defined?
    console.log(tbody.length); //gives 1, should be 0 though as there is no tbody

});

使用jQuery 1.6.4在Chrome 28.0,Firefox 22.0中测试过(当前项目需要它,尽管它也发生在jQuery 2.0.2中)

这里也是一个jsFiddle:http://jsfiddle.net/nerdess/rH5Lf/

4 个答案:

答案 0 :(得分:7)

tbody在表格中自动添加,您可以通过右键单击并查看组件(Chrome开发人员工具)看到tbody在那里

<table id="test">
    <tbody>
        <tr>
            <td>some table cell</td>
        </tr>
    </tbody>
</table>

答案 1 :(得分:3)

文档有效时需要tbody元素,因此如果缺少文档,大多数浏览器都会添加它。如果您使用Firebug或Chrome开发工具检查文档,您将在渲染源中看到它。

如果您可以更详细地编辑您的问题,我们可以建议其他方法。

答案 2 :(得分:1)

tbody元素标识行​​组的范围。如果表中没有tbody元素,那么tr元素的集合被视为单个组,因此被包装在jquery的Dom元素表示中的单个tbody元素下。这就是您将tbody计为1的原因。

答案 3 :(得分:1)

标准说:

实际上不允许TABLE直接包含TR元素,它们必须包含在THEAD,TFOOT或TBODY中。但为了简单和向后兼容,TBODY的开始标记可以省略“当表只包含一个表体并且没有表头或脚部分时”;在这种情况下,元素由浏览器推断。

点击此处,您会看到tbody以某种方式需要: http://www.w3.org/TR/html4/sgml/dtd.html

(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>