《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来代替。
复制内容到剪贴板
代码:
        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。搞的我很糊涂,请知情者点明我。。

posted on 2010-09-14 13:57  华电混球  阅读(156)  评论(0编辑  收藏  举报

导航

我的应用