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

转载于:https://www.cnblogs.com/dingdongnana/archive/2012/01/29/2331317.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值