0

我做了一些漏洞在IE8和IE9的錯誤,當我遇到一個奇怪的錯誤來了。 HTML中有一個<section class="create">標籤,但在頁面加載完成後,頁面的下方會出現相同的標籤。起初,我認爲有一些壞的javascript以某種方式克隆section,但我禁用了JavaScript,並且在頁面加載後它仍然存在。這必須是創建此標籤的HTML解析器,對吧?呈現的HTML根本不匹配HTML文件。Internet Explorer的HTML解析器會添加非結束標記嗎?

我知道HTML解析器將在</div>標籤或</html>標籤等加入,他們丟失的情況,但將永遠IE重新添加一個標籤出於某種原因?如果是這樣,這是什麼原因?如果不是這種情況,當javascript被禁用時,可能會導致HTML中不存在的標記被添加到DOM中?

我工作的HTML頁面是超過20,000線長,有一定不良HTML所有的地方,其中的任何一個可能會造成DOM被不適當地呈現。如果有一個片段可以添加到這個有幫助的問題,請在評論中告訴我。

這裏是最小的HTML複製這個問題。請注意,它只發生在form標記內,而不是div標記。所述section標籤重新打開本身在IE8和IE9形式元件關閉後,因此產生2個section元件。

<!DOCTYPE html> 
<html> 
    <head></head> 
    <body> 
     <form> 
      <section class="create"> 
       CREATE SECTION 
     </form> 
    </body> 
</html> 

而且這裏有一個小提琴:http://jsfiddle.net/VurE6/

爲了記錄在案,IE10,Chrome瀏覽器,Firefox和Safari都沒有顯示這種行爲(即我所知道的)。

+0

除非這是一個已知問題,某人可以根據一般描述輕鬆識別和識別,否則您需要提供一些代碼。將HTML縮小到仍然可以重現該問題的最小量,並將該子集的代碼(或其演示版或實時版的鏈接)發佈。 – 2013-03-15 00:32:18

+0

我會看看是否可以在複製問題的同時削減代碼。 – MattDiamant 2013-03-15 00:34:58

+1

您是否嘗試過通過驗證程序來運行它? – 2013-03-15 00:36:41

回答

3

在一定程度上,所有的瀏覽器做這樣的事情。例如,試試這個

<b>1<i class="create">2</b>3</i> 
在任何瀏覽器

,你會看到同時創建兩個I元素與「創造」類。

何時發生這種情況的規則是非常複雜的,但是當關閉標籤沒有結束自己的元素的後代的影響它發生。在IE9中,表單結束標記並未關閉該部分,因此爲了使該部分繼續,瀏覽器必須創建第二個部分元素。

雖然這使得從一定意義上講在B的情況下,我的元素,這是沒有意義的部分,所以它不會在實現HTML5解析算法像IE10和現代Firefox和Chrome瀏覽器的任何發生,但顯然,在IE9中。

http://www.w3.org/html/wg/drafts/html/master/syntax.html#misnested-tags:-b-i-/b-/i如何HTML5涉及的misnested B和I標籤的問題。

+0

太棒了。這完全回答了我的問題。更具體地說,似乎這樣做的算法是*重構有效格式化元素*算法,在這裏:http://www.w3.org/html/wg/drafts/html/master/syntax.html#reconstruct-所述活性格式化元素 – MattDiamant 2013-03-15 16:59:21