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