发新话题
打印

[分享] 慎用XHTML标签的自关闭写法

慎用XHTML标签的自关闭写法

XHTML里面的img标记应该这样写:<img alt="" src="" />,这种写法也就是所谓的自关闭,在XML中是完全合法的写法。如果你熟悉XML相关的开发,可能也就习惯于这种写法,想着XML中任何不含子节点的元素都可以这样写,那么XHTML中没有内容的标签也都可以这样写。XHTML中理论上当然允许任何标签以自关闭的方法来书写,然而浏览器兼容性却带来了新问题,那就是IE无法正确识别某些标签的自关闭写法。 字串8 & v4 p; w5 j5 j/ ^# |$ W
. Q2 X" N5 ?9 Z) F8 J
      请尝试输入以下XHTML代码并在IE中浏览:<p>hello <script type="text/javascript" /> world</p>,你会发现只能看到前面的hello而不见后面的world,这事情让人挺无法解释的吧。可能有不少人都曾经遇到过这个问题,并且花了几个小时在上面都找不到合理的解释。 字串4 2 D) j" U- M4 n! z5 K/ |

- G" [% S: V" e: B3 D      解释源自另外一段类似的代码:<p>hello <textarea /> world</p>,你在IE中看看其显示效果,能够得到合理的解释了吗?我们能够看到前面的hello正常显示了,而后面的world则显示在textarea里面,这证明IE并没有正确识别textarea标签已经自关闭了,而是当它没有关闭,并将后面的内容识别为textarea内部的内容。  
6 U' ^! r. F) X. {* n
1 {5 R4 h% {8 A* _( Z( ~0 W      这时候我们就明白前面那段代码为什么看不到后面的world了,因为它被当作script的一部分来识别了。这就说明了,在我们使用XHTML时并不能好像XML那样随意的使用自关闭的写法,只有少数原本不需要关闭的标签可以用自关闭的写法,其他标签即使没有任何内容最好也用成对的关闭写法。  ( `$ Z' l9 H4 p# S5 ~
& \# ~/ i" F( s% C( I2 H2 M( T
      最后需要提醒大家的是,其实弱智的parser不仅仅IE有,很多地方都可能碰到由于parser不严谨而引起的问题,所以我们在书写XHTML的时候还是要迁就一些老HTML继承下来的习惯,不能好像真的XML那样自以为符合标准了就随意写。不信?那么再试一个吧:<p>hello <br></br> world</p>,留意IE与Opera中的显示效果。/ l- A5 X) P+ i: D( S
. v1 V! C' ^8 G6 U4 A# T: b1 l
      XHTML一些相关的规范:/ B; ?5 I3 m9 a* Q  y! G
7 U0 C0 ~& E+ @+ @. ^/ s0 Z
      1.所有的标记都必须要有一个相应的结束标记' r2 a+ L8 A8 L$ N

2 J+ [% y0 \) y3 p' {: }0 q9 e      2.所有标签的元素和属性的名字都必须使用小写# l; x0 x0 g/ g8 o' d- W0 H+ u

( g, C$ i- L8 q5 J; Q      3.所有的XML标记都必须合理嵌套3 B$ b. x$ q3 ?7 K2 t
/ W% o+ e4 E3 x$ _1 p! ?
      4.所有的属性必须用引号""括起来
+ o0 |6 f, ~/ r' }3 y! ]! [3 M. B2 E; i1 w, V+ N2 ^
      5.把所有<和&特殊符号用编码表示
5 r8 R6 c# |5 D' T; U1 s9 k- ^1 I& T3 f4 K- }  J* a
      6.给所有属性赋一个值8 J: r$ I9 j1 a# M

5 |& K& O  w& z8 ]( O' C5 k- P  r      7.不要在注释内容中使“--”
【十六道题,奖金和证书的催命符】

TOP

发新话题