Javascript HTML表的DOM表示

Javascript HTML表的DOM表示,javascript,html,dom,Javascript,Html,Dom,我正在编写一些代码来遍历DOM中的一个表,我得到了一个惊喜。DOM(至少在FF中)不是我所期望的。FF插入了一个tbody和各种文本节点,其中只包含一个“\n”。源HTML是: <table> <tr> <th></th><th>Jan</th><th>Feb</th><th>Mar</th><th>Apr</th><th>May</t

我正在编写一些代码来遍历DOM中的一个表,我得到了一个惊喜。DOM(至少在FF中)不是我所期望的。FF插入了一个
tbody
和各种文本节点,其中只包含一个“\n”。源HTML是:

<table>
<tr>
<th></th><th>Jan</th><th>Feb</th><th>Mar</th><th>Apr</th><th>May</th><th>Jun</th><th>Jul</th><th>Aug</th><th>Sep</th><th>Oct</th><th>Nov</th><th>Dec</th>
</tr>
<tr><th>2010</th>
<td id='tdid0'>53</td>   <td id='tdid1'>249</td>  <td id='tdid2'>1689</td>  <td id='tdid3'>22753</td>
<td id='tdid4'>23051</td><td id='tdid5'>23633</td><td id='tdid6'>23923</td> <td id='tdid7'>23306</td>
<td id='tdid8'>23943</td><td id='tdid9'>24196</td><td id='tdid10'>24440</td><td id='tdid11'>24156</td>
</tr>
<tr><th>2011</th>
<td id='tdid12'>24262</td><td id='tdid13'>22554</td><td id='tdid14'>25507</td><td id='tdid15'>23144</td>
<td id='tdid16'>24354</td><td id='tdid17'>24610</td><td id='tdid18'>24870</td><td id='tdid19'>24424</td>
<td id='tdid20'>24698</td><td id='tdid21'>22640</td><td></td><td></td></tr>
</table>

年月日
2010
53   249  1689  22753
230512363323923 23306
23943241962444024156
2011
24262225542550723144
24354246102487024424
2469822640
1-FF插入了一个
tbody
作为
表的第一个子项,因此我必须上3级(从
td
)才能找到
表,而不是2级

2-Firebug中的html视图如预期显示了3行,其中第2行和第3行有一个
th
后跟12个
td
s。但是,单步执行时,
tbody
有6个子节点,每行后面都有一个NL文本节点

3-Firebug声称,正如预期的那样,每行有13个子项(一个标题和12个数据项)。但是,当使用
nextSibling
遍历子元素时,结果表明预期的
th
td
元素实际上是由包含WS的文本节点分隔的。 知道发生了什么吗?浏览器基本上能做它想做的吗?谢谢

FF已插入一个tbody

在HTML4中,tr元素可能不是表元素的子元素。中间需要一个tbody、thead或tfoot元素。但tbody元素的开始和结束标记是可选的。Firefox正确地插入了它

结果表明,tbody有6个子节点,每行后面都有一个NL文本节点

您的标记中有空白

结果表明,预期的th和td元素实际上由文本节点分隔,其中包含WS


同上

事实证明,更糟糕的情况是“Web开发人员”可以做他们想做的事情。在WS上-我以为它在html中被忽略了?FF似乎不仅保留了它,而且显式地将它插入到DOM中——这有意义吗?它是折叠的,没有被忽略。