|
蓝森林 http://www.lslnet.com 2006年8月25日 8:28
这个算js的bug吗?
[html]
<a id="uu">1</a>
<a name="uu">2</a>
<script>
u=document.getElementsByName("uu");
for (i=0;i<u.length;i++){
alert(u[i].name);
}
</script>
[/html] |
应该不是,看下面所述:
在下面的例子中,总共有5个标签,两个<b>,一个<li>,一个<a>,一个<button>,其中,只有<a>和<button>在HTML语法里,是有name这个attribute的,其它的,都没有,但是可以写上。可以看出,在HTML方法里,不具有name这个attribute的,即使是写上了name,也是不会取得的,就像 b2.对于没在HTML方法里没有name这个attribute的标签,如果id是document.getElementsByName(...)的参数相等,也是会被取出的,就像 b1,li3 .还有一点,需要指出,b1的name是写不是 aa,但是getElementsByName("aa")照样能把b1取出来.
[code]
<b id="aa" name="bb">b1</b>
<b name="aa">b2</b>
<li id="aa" name="cc">li3</li>
<a id="aa" onclick="alert(this.name)">a4</a>
<button name="aa" onclick="alert(this.name)">button5</button>
[/code]
[html]
<b id="aa" name="bb">b1</b>
<b name="aa">b2</b>
<li id="aa" name="cc">li3</li>
<a id="aa" onclick="alert(this.name)">a4</a>
<button name="aa" onclick="alert(this.name)">button5</button>
<script>
u=document.getElementsByName("aa");
alert("总共取出:"+u.length+" 个")
for (i=0;i<u.length;i++){
alert("第"+(i+1)+"个的name值是:" + u[i].name + "\n内容是:" +u[i].innerHTML);
}
</script>[/html] |
[html]
<li id="aa" name="cc">li3</li>
<UL>
<li id="aa" name="c4444">li444</li>
</UL>
<script>
u=document.getElementsByName("aa");
alert("总共取出:"+u.length+" 个")
for (i=0;i<u.length;i++){
alert("第"+(i+1)+"个的name值是:" + u[i].name + "\n内容是:" +u[i].innerHTML);
}
</script>
[/html]
那这个算bug吗?
:) |
当然是BUG,IE对ID属性处理的不严谨。换FireFox浏览器就能看出问题。 |
我只能这么说:对于这个getElementsByName方法,尽量不要去用,在不同的浏览器上,它的工作方式是不同的,这并不算是bug。 |
Sheneyan在上个帖子中说
同感,如果有人该意的去夸大其词的话,谁也没有办法,除非你能说服microsoft |
如果IE7出来修正了这个问题的话,岂不是Microsoft打了自己的嘴巴。 |
如果有 打嘴巴子 這種想法,可能就沒有今天的微軟了。
做人要厚道。 |
|