源码解读jQ中浏览器兼容模块support第1/2页

2020-05-27 17:57:35易采站长站整理

</script>
<script>
var tb = document.createElement("table");
var tr = document.createElement("tr");
tr.innerHTML = "trtrtr";
tb.appendChild(tr);
document.getElementsByTagName("body")[0].appendChild(tb);
</script>
</body>
</html>

代码执行完毕以后你会看到, 当table里没有元素的时候, chrome没有自动产生tbody, 如果你不按照正常的写法写table, 而是这样

"<table><tr>111</tr></table>";

产生的HTML变成这样”

111<table><tr></tr></table>“,  
在jQ中你这样写
$(“<table><tr>111</tr></table>”), 
生成的HTML也是这样的
["111","<table><tr></tr></table>"],
所以再三强调写html标签的嵌套要符合标准….

在IE中又是例外一回事,通过innerHTML的方式会自动添加tbody, 而且你标签嵌套错了他也不管你,通过appendChild的方式跟其他浏览器一样不会主动生成tbody;

$.support.htmlSerialize

IE678浏览器中不能够通过innerHTML动态生成link标签, 要通过新建标签的形式创建:


<html>
<head>
<meta charset="utf-8" />
<title>兼容</title>
</head>
<body>
<script type="text/javascript">

window.l = (function() {
var el = document.createElement("div"), index = 0;
el.style.cssText = "padding:10px;position:fixed;top:0;right:0;width:10%;border:1px solid #f00;";
return function(message) {
message = message.toString();
if( message ) {
var span = document.createElement("span");
span.innerHTML = (++index) + "信息:<br>"+ message+"<br>";
el.appendChild( span );
};
//IE低版本直接通过createElement创建的元素有parentNode;
if( !el.parentNode || (el.parentNode.toString() === "[object]") ) {
document.body.appendChild(el);
};
return l;
};
})();

</script>
<div class="bounce animated infinite">
bounce
</div>
<div id="link"></div>
<script type="text/javascript">