IE中getElementById的Bug

在IE7以前的版本中,有一个Bug,就是通过getElementById获取节点的时候,IE会把name属性当成id属性来处理。【IE8已经修复了改Bug】
先看一个例子:
<form> 
<input name="username" value="111" /> 
<input id="username" name="name" value="222" /> 
</form> 
<script type="text/javascript"> 
  var gg = document.getElementById("username"); 
  alert(gg.value); 
</script> 
结果是“111”
原因就是<input name="username" value="111" />出现在<input id="username" name="name" value="222" />前面,而且它的name属性和第二个input的id一样,就导致了,IE选取了第一个input。
 
参照YUI中的方法,重写了getElementById()函数。
如下:
 
<form> 
<input name="username" value="111" /> 
<input id="username" name="name" value="222" /> 
</form> 

<script type="text/javascript"> 
  var getElementById = function(el){ 
    var id = el; 
    el = document.getElementById(el); 
    if(el.id === id) 
      return el; 
    else{ 
      var nodes = document.all[id]; 
      for(var i = 0,len = nodes.length;i < len;i ++) 
        if(nodes[i].id == id) 
          return nodes[i]; 
    } 
  } 
  var gg = getElementById("username"); 
  alert(gg.value); 
</script>

这样,就能正确地选取目标节点了。


转自  http://younglab.blog.51cto.com/416652/269474

posted @ 2012-01-29 17:28  叮咚娜娜  阅读(224)  评论(0编辑  收藏  举报