3

我有一个非常简单的表格,其中包含最少的 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

4 回答 4

7

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

<table id="test">
    <tbody>
        <tr>
            <td>some table cell</td>
        </tr>
    </tbody>
</table>
于 2013-08-13T12:59:44.450 回答
3

tbody元素是文档有效所必需的,因此如果缺少它,大多数浏览器都会添加它。如果您使用 Firebug 或 Chrome 开发工具检查文档,您将在呈现的源代码中看到它。

如果您可以编辑您的问题,更详细地了解您想要实现的目标,我们可以建议替代方法。

于 2013-08-13T13:01:16.427 回答
1

tbody元素标识行​​组的范围。如果表中不存在 tbody 元素,则tr元素集合被视为单个组,因此包裹在tbodyjquery 的 Dom 元素表示中的单个元素下。这就是为什么您将tbody计数视为 1。

于 2013-08-13T13:10:13.217 回答
1

标准说:

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

检查这里,你会发现 tbody 是需要的: http ://www.w3.org/TR/html4/sgml/dtd.html

(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
于 2013-08-13T13:10:41.327 回答