ie烦人的bug篇

好多公司都不支持ie6了,基本都是ie8+,就连jq新版本也宣布放弃低版本ie,就不用说那些框架了,不过想用兼容ie的angularjs可以用我司徒大神写的avalon,个人感觉avalon也是比较好的,而且轻量,崇拜++。想用es6的同学可以github

es5-shim,react是不兼容ie8的,反正这些东西在ie低版本有n多bug,不是一个es5-shim能完全cover的。

unshift ie6.7下不返回长度
splice一个参数的情况下,ie6、7、8默认为0,其他浏览器默认为数组length

//判断window
function isWindow(){
window==document//IE678 true
document==window//IE678 false
}

旧版本ie下dom bom对象的constructor属性没有暴露出来

ie678
getAttribute不能返回用户预设,返回一个CSSStyleDeclaration
getAttribute href 会自动补充为完整路径
不支持opacity,要使用滤镜
在用innerHTML创建table元素,会被自动添加tbody,其他只返回<table></table>
用innerHTML转换字符串为元素节点,ie支持不完好,包括script,link,style,meta在内的no-scope元素都转换失败,需要在它前面添加一些字符,H5标签支持同不好。
判断select元素的disabled属性是否影响到子元素disabled取值。在Safari中,一旦select元素被disabled,他的孩子也被disabled
如果一个checkbox被设置checked=true,多次克隆后,只有Safari4中返回false
判断克隆元素时是否克隆attachEvent绑定的事件,只有旧版本IE及其兼容模式返回false
判断浏览器是否支持encoding属性,ie67要用encoding代替
判断能否删除元素节点自定义属性,旧版本IE不支持,直接置为undefined
判断getComputedStyle能否正确取得元素marginRight,Safari早期版本总是取回一个很大的数
当复制品指定了background-*样式的元素,对复制品的背景清空也会清空原来的

var div=document.createElement("div")
div.innerHTML=" <b>1</b><b>2</b>"
document.body.appendChild(div);
console.log(div.childNodes.length);//ie6-8弹出3,其他4
console.log(div.fristChild.nodeType)//ie6弹出1,其他3

ie6-8存在超空间的概念,当dom节点移出但是又有js相关联的时候,dom就会被存放在超空间。可以用parentNode判断

onXXX在ie下没有参数,其他第一个参数为event

 上面这些bug,还有许多更奇葩的bug,让人对ie深恶痛绝。如果有更多bug欢迎提出,如果有更多的知识点,以后会慢慢更新。

原文地址:https://www.cnblogs.com/dh-dh/p/5083756.html