《javascript高级程序设计》中一些模糊的 IE 6.0 bug ?
今天时间较为充裕,于是拿出一本《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来代替。 上面是测试代码,我并没有发现漏掉了什么,除了meta标签和title的标签可能会有顺序上的不同,只要是对nodeType=1的判断,是和其他浏览器是一致的.
2.IE6和opera7.5在getElementsByName上存在错误,首先,他们会返回id等于给定名称的元素,第二,他们仅仅检查<input />和<img />元素。
3.IE6在getElementById,如果给定的ID匹配某个元素的name特性,IE6还会返回这个元素,这是一个bug,也是你必须非常小心的一点.
代码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来代替。 上面是测试代码,我并没有发现漏掉了什么,除了meta标签和title的标签可能会有顺序上的不同,只要是对nodeType=1的判断,是和其他浏览器是一致的.
2.IE6和opera7.5在getElementsByName上存在错误,首先,他们会返回id等于给定名称的元素,第二,他们仅仅检查<input />和<img />元素。
3.IE6在getElementById,如果给定的ID匹配某个元素的name特性,IE6还会返回这个元素,这是一个bug,也是你必须非常小心的一点.
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
<!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>
"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中的确很淫荡,只要存在id=**的元素,无论它是什么,getElementsByName会直接将其返回,那么当不存在id=**的元素,并且name=**的元素不是input 和 img 这辈子它也不会得到返回。
这个bug的确存在,值得欣慰。
那么getElementById这个方法让我失望了,无论name=**的元素存在与否,getElementById都会忽略它,忽略它。。。只识别id=**的元素。
这些都是这书里糊涂的bug。搞的我很糊涂,请知情者点明我。。
![](http://bbs.blueidea.com/images/smilies/default/confused.gif)