《javascript高级程序设计》中一些模糊的 IE 6.0 bug ?
2010-09-14 13:57
274 查看
今天时间较为充裕,于是拿出一本《javascript高级程序设计》,补充一些平时忽略的基本知识。
读到元素访问章节,那些基本的访问方法getElementsByName getELementsByTagName getElementById.
平时也看过,但是局限于当时手头没有IE6的原因,没有亲自去尝试所有所说的ie6 bug.
书中说到
1.getElementsByTagName("*") IE6并不会返回所有元素,必须用document.all来代替。
2.IE6和opera7.5在getElementsByName上存在错误,首先,他们会返回id等于给定名称的元素,第二,他们仅仅检查<input />和<img />元素。
3.IE6在getElementById,如果给定的ID匹配某个元素的name特性,IE6还会返回这个元素,这是一个bug,也是你必须非常小心的一点.
现在我要说,经过我的测试,我可能真的完全没有发现这些上面所说的"bug"。为了验证他们我甚至卸载了自己的IE8.
1.getElementsByTagName("*") IE6并不会返回所有元素,必须用document.all来代替。复制内容到剪贴板代码:
2.IE6和opera7.5在getElementsByName上存在错误,首先,他们会返回id等于给定名称的元素,第二,他们仅仅检查<input />和<img />元素。
3.IE6在getElementById,如果给定的ID匹配某个元素的name特性,IE6还会返回这个元素,这是一个bug,也是你必须非常小心的一点.
代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"0>
<title>Test</title>
<script type="text/javascript" charset="utf-8">
window.onload=function(){
var d1s=document.getElementsByName('d1');
for(var name in d1s){
alert(name+"---"+ d1s[name].innerHTML);
}
alert(d1s.length)
var d1=document.getElementById('d1');
alert(d1.innerHTML);
}
</script>
</head>
<body>
<div name="d1">
123
</div>
<div id="d2">
</div>
<div id="d3">
</div>
<div id="d1">345</div>
</body>
</html>
IE6的getElementsByName首先返回了id=d1的div,并且没有返回name=d1,那么第二条成立。此时我把<div id="d1">345</div>去掉,然后就什么都不返回。
那么明确了,这个方法在IE6中的确很淫荡,只要存在id=**的元素,无论它是什么,getElementsByName会直接将其返回,那么当不存在id=**的元素,并且name=**的元素不是input 和 img 这辈子它也不会得到返回。
这个bug的确存在,值得欣慰。
那么getElementById这个方法让我失望了,无论name=**的元素存在与否,getElementById都会忽略它,忽略它。。。只识别id=**的元素。
这些都是这书里糊涂的bug。搞的我很糊涂,请知情者点明我。。
读到元素访问章节,那些基本的访问方法getElementsByName getELementsByTagName getElementById.
平时也看过,但是局限于当时手头没有IE6的原因,没有亲自去尝试所有所说的ie6 bug.
书中说到
1.getElementsByTagName("*") IE6并不会返回所有元素,必须用document.all来代替。
2.IE6和opera7.5在getElementsByName上存在错误,首先,他们会返回id等于给定名称的元素,第二,他们仅仅检查<input />和<img />元素。
3.IE6在getElementById,如果给定的ID匹配某个元素的name特性,IE6还会返回这个元素,这是一个bug,也是你必须非常小心的一点.
现在我要说,经过我的测试,我可能真的完全没有发现这些上面所说的"bug"。为了验证他们我甚至卸载了自己的IE8.
1.getElementsByTagName("*") IE6并不会返回所有元素,必须用document.all来代替。复制内容到剪贴板代码:
window.onload=function(){ var body=document; var divs=body.getElementsByTagName('*'); var cl=""; for(var name in divs){ if(divs[name].nodeType==1) cl+=(divs[name].tagName); } alert(cl); }上面是测试代码,我并没有发现漏掉了什么,除了meta标签和title的标签可能会有顺序上的不同,只要是对nodeType=1的判断,是和其他浏览器是一致的.
2.IE6和opera7.5在getElementsByName上存在错误,首先,他们会返回id等于给定名称的元素,第二,他们仅仅检查<input />和<img />元素。
3.IE6在getElementById,如果给定的ID匹配某个元素的name特性,IE6还会返回这个元素,这是一个bug,也是你必须非常小心的一点.
代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"0>
<title>Test</title>
<script type="text/javascript" charset="utf-8">
window.onload=function(){
var d1s=document.getElementsByName('d1');
for(var name in d1s){
alert(name+"---"+ d1s[name].innerHTML);
}
alert(d1s.length)
var d1=document.getElementById('d1');
alert(d1.innerHTML);
}
</script>
</head>
<body>
<div name="d1">
123
</div>
<div id="d2">
</div>
<div id="d3">
</div>
<div id="d1">345</div>
</body>
</html>
IE6的getElementsByName首先返回了id=d1的div,并且没有返回name=d1,那么第二条成立。此时我把<div id="d1">345</div>去掉,然后就什么都不返回。
那么明确了,这个方法在IE6中的确很淫荡,只要存在id=**的元素,无论它是什么,getElementsByName会直接将其返回,那么当不存在id=**的元素,并且name=**的元素不是input 和 img 这辈子它也不会得到返回。
这个bug的确存在,值得欣慰。
那么getElementById这个方法让我失望了,无论name=**的元素存在与否,getElementById都会忽略它,忽略它。。。只识别id=**的元素。
这些都是这书里糊涂的bug。搞的我很糊涂,请知情者点明我。。
相关文章推荐
- IE相关的一些BUG汇总
- IE中的布局BUG和一些可以避开的BUG
- IE8下innerhtml的一些bug
- Firefox和IE中浏览一些网页字体模糊的解决方法
- ie下nextSibling一些bug
- IE里面的一些BUG记录
- 一些IE样式的Bug也许答案就在这里
- 一些ie BUG总结
- 在IE 6中<a>标签的一些bug和解决方法
- 记录 IE 下一些奇妙的 BUG
- The first a few bugs of IE 9 discovered by me 我刚装 IE 9 后发现的一些 bug
- 收集一些关于IE的BUG
- 巧解jquery及其插件一些bug
- IE 控件一些高级使用方法
- jquery的slideUp、slideDown函数在IE中的bug
- onbeforeunload与a标签在IE中的冲突bug
- 打败 IE 的葵花宝典:CSS Bug Table
- IE6和IE7下colspan属性的bug
- IE与火狐中常见的一些兼容问题