我正在玩一些使用原始html和JQuery的想法.我做的一件事是创建一个包含一组行的表元素.
<table id="MyTable" >
<tr>
<td>Title</td>
</tr>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
但是,当我在FireFox + Firebug,IE8开发人员工具栏或Google Chrome JavaScript调试器中查看代码时......所有这些代码都显示了围绕所有tr节点的tbody元素.
我并不反对这种情况......但这是标准行为吗?
IE9和Chrome14都记录TBODY为tagName内部元素<table>
HTML5规范<table>清楚地说明:
后跟零个或多个tbody元素或一个或多个tr元素
此外.HTML5规范<tr>清楚地说明:
作为表元素的子元素,在任何标题,colgroup和thead元素之后,但仅当没有tbody元素是table元素的子元素时.
为什么浏览器会破坏我的DOM并注入<tbody>时间
"向后兼容性"的答案绝对没有意义,因为我特意选择了HTML5文档类型.
这是为了向所有相似的(但是太具体的问题,成为一个近距离目标候选人)提供规范的问答,每周弹出一到两次.
我正在开发一个应用程序,需要解析一个包含表格的网站.由于派生用于抓取网页的XPath表达式是无聊且容易出错的工作,我想使用Firebug的XPath提取器功能(或其他浏览器中的类似工具).
示例输入如下所示:
<!-- snip -->
<table id="example">
<tr>
<th>Example Cell</th>
<th>Another one</th>
</tr>
<tr>
<td>foobar</td>
<td>42</td>
</tr>
</table>
<!-- snip -->
Run Code Online (Sandbox Code Playgroud)
我想提取第一个数据单元格("foobar").Firebug提出了XPath表达式
//table[@id="example"]/tbody/tr[2]/td[1]
Run Code Online (Sandbox Code Playgroud)
它适用于任何XPath测试器插件,但不适用于我自己的应用程序(未找到结果).如果我将查询减少到//table[@id],它会再次起作用.
出了什么问题?
请查看此示例:http://jsfiddle.net/lulu2792/a9LZd/
我使用innerHTML设置表格行内容(包括单元格内容),我在Firefox和Chrome上运行良好.但是,它在IE7上有一个错误(也在IE9兼容模式下).表HTML结果是:
<TABLE id=table1>
<TBODY>
<TR>
<TD>
Test
</TD>
</TR>
<TR>
ABC
</TD>
</TR>
</TBODY>
</TABLE>
Run Code Online (Sandbox Code Playgroud)
请关注第二行,它有一个错误.我不明白为什么innerHTML会在IE7上导致这个错误.如何纠正这个问题?
我也有一个问题:如果我不在像这样的表元素中使用tbody标记:
var html = "<table id='table1'><tr><td>Test</td></tr></table>";
Run Code Online (Sandbox Code Playgroud)
浏览器仍然呈现此标记.
请帮我回答上面两个问题.