html、javascript會涉及到三個解析器,html解析器、xml解析器、javascript解析器。那麼好了,問題來了,以上代碼經常混編在一起,各自有各自的規則,終究會有衝突的,如下就是衝突。 根據W3C XHTML 1.0的規定:在XHTML中,因為<和&這兩個符號有特殊意義(小於號用於標 ...
html、javascript會涉及到三個解析器,html解析器、xml解析器、javascript解析器。那麼好了,問題來了,以上代碼經常混編在一起,各自有各自的規則,終究會有衝突的,如下就是衝突。
根據W3C XHTML 1.0的規定:在XHTML中,因為<和&這兩個符號有特殊意義(小於號用於標簽的開始標記),所以這兩個符號<和&需要轉義成<和&。
當html代碼中摻雜javascript代碼的時候,同時javascript代碼中包含了”<”字元的時候html解析會出現錯誤,如果機智的將”<”替換為<,這樣會導致javascript無法解析。為瞭解決以上衝突,可以使用<![CDATA[
來處理。這樣html解析過程中會將標識部分的代碼當作文本字元處理,不做解析。
哎呦不對,按照規則寫了javascript代碼,增加了CDATA註釋,為毛在IE6、Firefox、chrome將javascript跳過了沒有執行呢。這個原因牽扯到html的工作模式了,我簡單的理解為配置項吧,一個模式標準模式,這個時候解析器使用的是xml解析器,另一個模式是相容模式,這個時候使用的是html解析器。CDATA註釋在xml解析器中是認識的,但是html解析器是不認識的。怎麼辦?
一勞永逸的來了,相容所有//<![CDATA[ 文本 //]]>
。
核心點在於三個解析器的各自的標準不同。