2012-12-20 15 views
0

IE10會破壞/更改HTML層次結構,看起來似乎。下面的示例更好地解釋:使用java-script在IE10中進行HTML解析會改變HTML結構

<html> 
<head> 
<title>IE10 example</title> 
</head> 
<body> 
<script language="javascript"> 
    function submitForm() { 
     var temp; 
     temp = document.getElementById("myTable"); 
     alert(temp.innerHTML); 
    } 
    </script> 
<table id="myTable"> 
<thead> 
    <tr> 
    <td>First Name</td><td>Last Name</td> 
    </tr> 
</thead> 
<tbody > 
    <form action="/users" method="post" name="userform"> 
    <input type="hidden" name="userName"> 
    <tr> 
     <td>admin</td> 
    </tr> 
    <tr> 
     <td>SA</td> 
    </tr> 
    </form> 
</tbody> 
</table> 
<script language="javascript"> 
     submitForm() 
</script> 
</body> 
</html> 

如果將上述HTML頁面加載到IE10中,則表單節點在輸入節點之前關閉。因此,對於任何輸入節點的任何訪問失敗都會導致NULL /未定義錯誤。這個HTML在Mozilla,Chrome,IE9,IE10可比性模式下按預期加載。

預計這種行爲? 我很感謝你的時間&幫助

+0

您是否也可以張貼破損的解釋,讓我們有明確的比較? – CyberSkull

+0

請通過[驗證器](http://validator.w3.org/check)運行您的HTML並觀察錯誤。 「form」和「input」元素的位置對我來說看起來是無效的,我會懷疑其他瀏覽器通過允許HTML工作而非常寬鬆。 'tbody' [只能接受](http://www.w3.org/TR/html5/tabular-data.html#the-tbody-element)'tr'元素 – plasmid87

+0

缺少的文檔類型 <!DOCTYPE html PUBLIC「 - // W3C // DTD XHTML 1.0 Transitional // EN」「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」> 是的。 HTML語法是錯誤的。正如你所說的其他瀏覽器可能太寬大了。謝謝 – user1919511

回答

1

這不是唯一的IE10。 DOM在IE10,Chrome,Opera和Firefox中結束了。所有關閉形式,我通過複製標記進行的測試輸入,然後上面顯示:

https://dl.dropbox.com/u/444684/stackoverflow/test.html

第一個問題是,你缺少的doctype。這將使瀏覽器進入quirksmode模式,這意味着它不會渲染標準,規則更加灰暗。爲了更好的跨瀏覽器的一致性,你應該在文檔的頂部添加HTML5的doctype:

接下來的問題是,一種形式是不允許是tbody元素的直接子。由於它是無效的,它遵循HTML5解析算法並關閉表單。爲了避免這種移動形式,例如使它成爲表格的父項。

https://dl.dropbox.com/u/444684/stackoverflow/test2.html

如果您在瀏覽器中調試程序看,如F12在IE中,你會看到現在的輸入表單內。您不再需要警報,因爲DOM檢查器是一種更簡單的調試方法。