2011-12-21 67 views
3

我只寫了一些代碼來遍歷表格的DOM,並且我得到了一個驚喜。 DOM(至少在FF中)並不是我所期望的。 FF已插入一個tbody和各種文本節點,其中只包含一個「\ n」。 HTML源代碼是:HTML表格的DOM表示

<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> 

1 - FF插入了tbodytable的第一個孩子,所以我必須上去3個級別(從td)找到table,而不是2

2 - 如預期的那樣,Firebug中的html視圖顯示3行,其中第2行和第3行有th,後面跟着12 td s。但是,單步執行時,結果發現tbody有6個孩子,每行後面有一個NL文本節點。

3 - Firebug聲稱每行有13個孩子,如預期的那樣(頭部和12個數據項)。當通過nextSibling步進孩子時,事實證明預期的thtd元素實際上是由包含WS的文本節點分隔的。 任何想法發生了什麼?瀏覽器基本上可以做它想做的事情嗎?謝謝。

+0

事實證明,最糟糕的情況是「web開發者」可以做他們想做的事情。 – kapa 2011-12-21 17:28:45

回答

5

FF插入了TBODY

在HTML 4 tr元素可能不是一個表元素的子元素。你需要一個tbody,介於兩者之間的thead或tfoot元素。雖然tbody元素的結束標記是可選的,但是它的開頭是可選的。 Firefox正確插入它。

事實證明,在TBODY有6個孩子,每行後NL文本節點

您在您的標記有白色的空間有

事實證明,預期th和td元素實際上由文本節點分開,其中包含WS

同上

+0

關於WS - 我認爲它只是在HTML中被忽略? FF似乎不僅保留了它,而且明確地將它插入到DOM中 - 這是否有意義? – EML 2011-12-21 17:36:52

+0

它已摺疊,未被忽略。 – Quentin 2011-12-21 17:46:04