innerHTML在主要浏览器中的差异

废话不多说,直接上代码:

<!DOCTYPE html>
<head>
<script src="http://www.oschina.net/js/2011/jquery-1.5.1.min.js"></script>
</head>
<body>
<script>
$(function(){
	var div=document.createElement('div');
	//设置innerHTML为两个空格
	div.innerHTML='  ';
	//IE:0(IE 9未测),chrome:2
	alert(div.innerHTML.length);
});
</script>
</body>

结论:IE在设置innerHTML时会忽略掉开始的所有空格文本。

事实上jQuery的$.support检测leadingWhiteSpace属性正是这样实现的,检测第一个子节点的nodeType是否是文本类型(nodeType==3)。请看jQuery的源码:

var div = document.createElement("div");
div.style.display = "none";
div.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
jQuery.support = {
                leadingWhitespace: div.firstChild.nodeType === 3,
       ...
};
仔细看看jQuery的源代码你会发现一些很有意思的东西,比如文本节点后的'<link />',这个节点时用来检测$.support.htmlSerialize。

结论:IE6~8 会直接过滤掉link标签,而chrome会保留,但是innerHTML被更改为'  <link>'。

转载于:https://my.oschina.net/astrongpig/blog/29776

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值