在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>
< 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>
< 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>
这样,就能正确地选取目标节点了。