document.all["line"].length的问题(感觉是javascript的bug)

jornet 2007-05-18 05:44:40
为什么同样的页面:
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源文件进行比较的



...全文
319 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
denni_hxc 2008-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tt2451 的回复:]
document.getElementsByName( "line ")
返回的是 对象的集合,length=1代表集合里有一个对象


document.all.line.length
document.all( "line ").length
返回的是对象所包含元素的集合
[/Quote]

同意3楼的观点,并进行补充,希望对大家有帮助:
<!--document.all("id")用法-->
<script language=JavaScript>
var load_line_i=1;
var load_line_n=500;

function load_n(txt)
{
load_line_i+=400/load_line_n;
window.status="请等待..已完成"+Math.floor(load_line_i/4.00)+"%";
load_txt.innerText=txt+" "+Math.floor(load_line_i/4.00)+"%";
document.all("line").width=load_line_i;
}
</script>


<!--document.getElementsByName( "id")的技巧-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>document.getElementById()使用技巧</title>
</head>
<p>
在我们写javascript的时候经肯定会经常用到 document.getElementById() 这个方法,这么长一串很容易写错,而且其中getElementById又有大小写之分。
其实prototype.js里提倡的一个方法就是使用$()简写,通过以下的函数,你可以用$('id')来实现document.getElementById('id') 这个功能,怎么样,很爽吧
</p>

<!--常用字符串集合,爽-->
<script>
function $()
{
var elements = new Array();
for (var i = 0; i < arguments.length; i++)
{
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}
</script>

<body>
text1:
<input name="textName1" type="text" id="textName1" />
<br>
text2:
<input name="textName2" type="text" id="textName2" />
<br>
<input type="button" name="Submit" value="text1" onclick=alert($('textName1').value) />
<input type="button" name="Submit2" value="text2" onclick=alert($('textName2').value) />

</body>
</html>

mail:denni_hxc@163.com
blog:http://blog.163.com/denni_hxc/
jornet 2007-05-23
  • 打赏
  • 举报
回复
因为document.all['line'],在ie中的理解是如果只有一个名字为line的对象,就返回这个对象,如果有多个的话,返回的是一个集合

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

这个解释比较合理,多谢拉,100分当之无愧
jornet 2007-05-21
  • 打赏
  • 举报
回复
楼上的能解释下
当为三个line的时候。如下又是正确的呢
document.all["line"].length=3
applebomb 2007-05-21
  • 打赏
  • 举报
回复
单个string对象时,length返回为字符串长度
取到集合的话,length返回集合元素个数
dreamover 2007-05-21
  • 打赏
  • 举报
回复
因为document.all['line'],在ie中的理解是如果只有一个名字为line的对象,就返回这个对象,如果有多个的话,返回的是一个集合

而document.getElementsByName('line'),不管有几个名字为line的对象,都是返回一个集合
jornet 2007-05-21
  • 打赏
  • 举报
回复
谁能解释清楚下面这个疑问,这100分就给谁啦

当为三个line的时候。如下又是正确的呢
document.all["line"].length=3
For_suzhen 2007-05-19
  • 打赏
  • 举报
回复
向上 学习
shuai45 2007-05-18
  • 打赏
  • 举报
回复
document.getElementsByName("line")
返回你定义line的数据集合
yao2007 2007-05-18
  • 打赏
  • 举报
回复
楼上正解
tt2451 2007-05-18
  • 打赏
  • 举报
回复
document.getElementsByName("line")
返回的是 对象的集合,length=1代表集合里有一个对象



document.all.line.length
document.all("line").length
返回的是对象所包含元素的集合
tt2451 2007-05-18
  • 打赏
  • 举报
回复
document.all("line").length
tt2451 2007-05-18
  • 打赏
  • 举报
回复
document.all.line.length

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧