HTML表的DOM表示

EML*_*EML 3 html javascript 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</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>
Run Code Online (Sandbox Code Playgroud)

1 - FF插入了一个tbody作为第一个孩子table,所以我必须上升3级(从a td)找到table,而不是2

2 - Firebug中的html视图按预期显示3行,其中第2行和第3行th后跟12 td秒.然而,当单步执行时,结果是tbody有6个子节点,每行后面有一个NL文本节点

3 - Firebug声称每行有13个孩子,正如预期的那样(标题和12个数据项).nextSibling然而,当踩过孩子时,事实证明,预期thtd元素实际上是由包含WS的文本节点分开的.知道发生了什么事吗?浏览器可以基本上做它想要的吗?谢谢.

Que*_*tin 5

FF插入了一个tbody

在HTML 4中,tr元素可能不是表元素的子元素.你需要一个tbody,thead或tfoot元素.tbody元素的开始结束标记是可选的.Firefox正确插入它.

事实证明,tbody有6个子节点,每行后面有一个NL文本节点

您的标记中有空白区域

事实证明,预期的th和td元素实际上是由包含WS的文本节点分隔的

同上