按照W3C的定義,HTML中的注釋以<!–開(kāi)頭,以–>結(jié)尾,但是真相并不僅僅如此。HTML是由SGML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)衍生而來(lái),而在SGML中注釋的定義如下:
一個(gè)注釋以<!開(kāi)頭,以>結(jié)尾。注釋中可以包含零個(gè)或多個(gè)注釋塊,每個(gè)注釋塊以–開(kāi)頭,并以–結(jié)尾。并且,注釋塊之間可以包含空格。
因此,以下注釋都是正確的:
<!--Hello--> <!--Hello-- --World--> <!----> <!>
用正則表達(dá)式來(lái)表示的話,/<!(–[^-]*–)?(\s*–[^-]*–)*>/能夠匹配的注釋都是正確的。因此,下邊這種詭異的注釋雖然是一個(gè)正確的SGML注釋,但是按照W3C的定義來(lái)說(shuō)就不正確了。
<!--Hello---->World-->
反過(guò)來(lái),下邊兩種注釋是正確的W3C注釋,但是卻不是正確的SGML注釋,因?yàn)榘⑨寜K的–沒(méi)有配對(duì)。
<!---- >--> <!------>
然后問(wèn)題就來(lái)了。Firefox按照SGML的標(biāo)準(zhǔn)來(lái)解釋注釋的。而IE、Chrome、Opera按照W3C的標(biāo)準(zhǔn)來(lái)解釋注釋。所以<!–Hello—->World–>這種注釋在Firefox下正常,但是在其它瀏覽器下會(huì)把World–>顯示在頁(yè)面里。反過(guò)來(lái),<!——>在其它瀏覽器里正常,但是Firefox下會(huì)把<!——>顯示在頁(yè)面里,因?yàn)镕irefox認(rèn)為這不是一個(gè)注釋。另外,對(duì)于<!—- >–>來(lái)說(shuō),F(xiàn)irefox會(huì)認(rèn)為<!—- >才是注釋,把后邊的–>顯示出來(lái),IE和Chrome下這個(gè)是一個(gè)正確的注釋,而Opera會(huì)“智能”地認(rèn)為<!—- >–>中間的空格是不小心多出來(lái)的,所以“好心”地把空格去掉后,把不適注釋部分的–>給顯示出來(lái)。
由于注釋中間的中劃線在各種瀏覽器中的表現(xiàn)如此不一致,因此為了避免種種意想不到的驚喜,最直接的做法就是避免在注釋中包含中劃線。
有的同學(xué)或許要問(wèn),這個(gè)或許是一個(gè)不錯(cuò)的知識(shí),可是和我們的日常開(kāi)發(fā)有什么關(guān)系呢?那么請(qǐng)看下邊這段html:
<!--<a href="Sedan'>http://www.alibaba.com/products/used_cars/--1217----------------6-5574,.html">Sedan <span>(79727)</span></a>-->
在我們的網(wǎng)站里這種鏈接很常見(jiàn),而且href的value是模板變量生成的。因此,如果我們?cè)谀0謇镞@么寫(xiě):
<!--<a href="${Url}">${Name}<span>(${num})</span></a>-->
可能覺(jué)得不會(huì)有問(wèn)題,但是最后生成的頁(yè)面在Firefox下就會(huì)把注釋部分顯示成下邊這樣:
Sedan (79727)-->
這個(gè)例子作為理由來(lái)講的確很不充分,畢竟沒(méi)有誰(shuí)會(huì)用HTML注釋來(lái)刪掉頁(yè)面里不需要的內(nèi)容,但是說(shuō)不定以后的什么時(shí)候這些關(guān)于注釋的知識(shí)會(huì)在各位的工作中派上用場(chǎng),這就是豆知識(shí)。
PS:如果有同學(xué)對(duì)HTML注釋特別感興趣,可以繼續(xù)閱讀本文的參考文獻(xiàn):
本文鏈接:http://www.95time.cn/tech/web/2011/8695.asp
出處:Alibaba.com UED
責(zé)任編輯:bluehearts
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|