日期:2014-05-18  浏览次数:20814 次

document.all["line"].length的问题(感觉是javascript的bug)
为什么同样的页面:
document.all[ "line "].length=undefine

document.getElementsByName( "line ").length=1

line相关的source如下:
<TR   class= "trNormal "   id= "line "   onclick= "bgColorChange(0) ">
<TD> 1 </TD>
<TD> 2 </TD>
</TR>

------------------------------------------------
还有另外一种更奇怪的现象:

当line相关的source为如下时,document.all[ "line "].length=undefine
line相关的source如下:(只有一个line对象)
<TR   class= "trNormal "   id= "line "   onclick= "bgColorChange(0) ">
<TD   > 1 </TD>
<TD   > 2 </TD>
</TR>
**************
而当line相关的source为如下时,document.all[ "line "].length=3
line相关的source如下:(只有三个line对象)
<TR   class= "trNormal "   id= "line "   onclick= "bgColorChange(0) ">
<TD   > 1 </TD>
<TD   > 2 </TD>
</TR>
<TR   class= "trNormal "   id= "line "   onclick= "bgColorChange(1) ">
<TD   > 1 </TD>
<TD   > 2 </TD>
</TR>
<TR   class= "trNormal "   id= "line "   onclick= "bgColorChange(2) ">
<TD   > 1 </TD>
<TD   > 2 </TD>
</TR>
——————----------------------------------------------
可能有人看啦会认为还有其他source不一样。
但我很确信的说除拉以上说明不一样的地方,其他source全部一样
因为我是用windiff文件比较工具对比过的,对两个html源文件进行比较的




------解决方案--------------------
document.all( "line ").length
------解决方案--------------------
document.getElementsByName( "line ")
返回的是 对象的集合,length=1代表集合里有一个对象


document.all.line.length
document.all( "line ").length
返回的是对象所包含元素的集合
------解决方案--------------------
document.getElementsByName( "line ")
返回你定义line的数据集合
------解决方案--------------------
向上 学习
------解决方案--------------------
因为document.all[ 'line '],在ie中的理解是如果只有一个名字为line的对象,就返回这个对象,如果有多个的话,返回的是一个集合

而document.getElementsByName( 'line '),不管有几个名字为line的对象,都是返回一个集合