Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

短注释节点在IE9-中的BUG

  注释节点和文本节点一样都是直接保存数据部分的,所以我们会用data属性去访问。但是在IE9-中,对于短注释的解析有点问题。我们在IE9-中访问短注释节点的data属性时,data属性中的数据头尾的两个字符会被吃掉。甚至如果字符不够时还会出现更奇怪的结果。
<!我是个短注释节点>
<script>
var node=document.childNodes[0];
console.log(node.data);
</script>

  很显然,IE9-中对注释的认知就是“<!”开头和“>”结尾的标记,并且认为所有注释都是标准注释,也就是“<!--内容-->”的格式,所以紧挨着标记的两个文字被当做标准注释的“--”给吃掉了。
  既然它要吃这些文字,那么粮食储配不足的时候它会怎么办呢?
<!你妹>
<script>
var node=document.childNodes[0];
console.log(node.data);
</script>

  看IE是有多饥渴呀!直接抛出欲求不满的错误了!
  那这个问题怎么解决呢?IE中有IEOnly的text属性可以用于解决这个问题。其它浏览器都不支持这个属性,而且这个属性返回的并不是注释的内容,而是整个注释节点的文本,类似outerHTMl,所以使用text我们还得自己去把标记部分文本去掉。
<!你妹>
<script>
var node=document.childNodes[0];
console.log(
  node.text
    ?node.text.replace(/^<!(--)?([\s\S]*)\1>$/g,"$2")
    :node.data
);
</script>

网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^