2012-03-25 52 views

回答

3

現代瀏覽器的解析器(即那些使用HTML5解析算法)像這樣工作。如果他們希望接下來的文字或新的標籤,並且他們看到<!,那麼他們會檢查接下來的幾個字符,看他們是否是--DOCTYPE或者如果他們正在處理嵌入式SVG或MathML [CDATA[。 (參見http://dev.w3.org/html5/spec/tokenization.html#markup-declaration-open-state

如果,如在<!- foo的情況下,沒有這些匹配的,則解析器進入在其中之後,直到下一個>的所有字符,被讀出和並轉化成一個註釋的bogus comment state被投入進入DOM。

因此,您看到的行爲與<!-的工作方式類似於評論開始。請注意,這種行爲對於破壞的標記是「修復」行爲,明智的是不依賴它。

你可以看到這樣的標記怎麼會在這裏形成了一個DOM:Live DOM Viewer

另外請注意,這是什麼@Amber說不同。在任何有意義的意義上,它都不被視爲標籤,它當然不會被忽略。

+0

「作爲標籤處理」,意思是它被分析到下一個'>'(這是標籤的結束字符),而不是下一個' - >'(這是註釋的結尾字符) 。 「被忽略」是指它被用作評論,而不是影響顯示頁面的文本。 – Amber 2012-03-25 17:32:54

5

它實際上並不工作 - 它只是將其解釋爲實際標記,然後將該標記標記爲無效。

<!- foo bar --> 

被視爲一個標籤,<!-foo bar-->這顯然不是一個標準的HTML標記,並且因此被忽略。

試試這個,你會看到它不是真正的工作作爲註釋:

<!- >foo bar--> 
+0

這導致了另一個問題: 如果編譯器/解釋器無法讀取註釋, 我們如何測試它沒有被讀取(當然,如我的例子)? – 2012-03-25 07:34:12

+3

@pop使用[html驗證器](http://validator.w3.org/)。 – nobody 2012-03-25 07:42:05