<textarea id=test></textarea>
<textarea id=test></textarea>
<script>
for(i=0;i<document.all.test.length;i++)
document.all.test[i].value="freefalcon";
</script>
<textarea id=test></textarea>
<script>
for(i=0;i<document.all.test.length;i++)
document.all.test[i].value="freefalcon";
</script>
var r=document.all[id];
if(r.length==null) r=[r];
var result = new Array();
for (var i=0;i<r.length;i++)
if (r[i].id==id)
result[result.length]=r[i];
return result;
}剩下的就不说了吧?
<textarea id=test></textarea>
<script>
var o=document.getElementsByName("test")
for(i=0;i<o.length;i++)o[i].value="freefalcon";
</script>
<textarea name=test></textarea>
<script>
var o=document.getElementsByName("test")
for(i=0;i<o.length;i++)o[i].value="freefalcon";
</script>
------------------------------------------------
getElementById 返回的是相同ID的第一个对象
getElementsByName 返回的是相同名字或者ID的对象的集合
我写的getElementsById 是为了返回相同ID对象的集合,名字相同的不算。
你看我前面帖的代码,getElementsByName把<textarea id=test></textarea>和<textarea name=test></textarea>等同处理了,要是用我的函数就会忽略后面那个。
-------------------------------------------------runmin(*^_^*) :
也就是 document.all.tags() 呵呵,反正都一样。不过all()和getElementsByName()在同名的元素只有一个的时候的返回有差别:前者返回元素,后者返回只有一个元素的集合。
<input type="text" id=txt>
<input type="text" id=txt>
<input type="text" id=txt><input type="button" value=check onclick=check()>
<script>
function document.getElementsById(sId){
var objects=document.all[sId];
var collObjects = new Array();
if(objects==null)return collObjects;
if(objects.length==undefined){
collObjects[0]=objects;
return collObjects;
}
for (var i=0;i<objects.length;i++)
collObjects[i]=objects[i];
return collObjects;
}
function check(){
var texts=document.getElementsById("txt");
for(i=0;i<texts.length;i++)
alert(texts[i].value);
}
</script>
<script>
function document.getElementsById(sId){
var objects=document.all[sId];
var collObjects = new Array();
if(objects==null)return collObjects;
if(objects.length==undefined){
collObjects[0]=objects;
return collObjects;
}
return objects;
}
<textarea name=test></textarea>
<script>
var o=document.getElementsByName("test")
for(i=0;i<o.length;i++)if(o[i].id=="test")o[i].value="freefalcon";
</script>
我的哪里错了?你的倒是有点问题:
undefined在IE5下面不是常量,应该用null比较好。
此外你的函数没能区分name和id啊:<BODY>
<input type="text" id=txt>
<input type="text" name=txt>
<input type="text" id=txt><input type="button" value=check onclick=check()>
<script>
function document.getElementsById(sId){
var objects=document.all[sId];
var collObjects = new Array();
if(objects==null)return collObjects;
if(objects.length==null){
collObjects[0]=objects;
return collObjects;
}
for (var i=0;i<objects.length;i++)
collObjects[i]=objects[i];
return collObjects;
}
function check(){
var texts=document.getElementsById("txt");
for(i=0;i<texts.length;i++)
alert(texts[i].value);
}
</script></BODY>第2个input没有指定id的,你的函数还是把它逮出来了。后面那个不复制的有一样的问题,我之所以要复制就是为了判断id是否符合的嘛,你还把它去掉?
to emu(ston):不好意思,谢谢提醒。主要是我对document.all[]返回的对象不是很清楚,:-),不过你的if(r.length==null)还是有问题,你可以试一个不存在的id,看有没有问题,反正在我这儿会报错。
好了,有了秋水的提示,我们俩的笨办法都不需要了,如下:
<BODY>
<input type="text" id=txt value=1>
<input type="text" name=txt value=2>
<input type="text" id=txt value=3>
<input type="button" value=check onclick=check()><script>
function document.getElementsById(sId){
var objects=document.getElementsByName(sId);
var collObjects = new Array();
for (var i=0;i<objects.length;i++)
if(objects[i].id==sId)
collObjects[collObjects.length]=objects[i];
return collObjects;
}
function check(){
var texts=document.getElementsById("txt");
for(i=0;i<texts.length;i++)
alert(texts[i].value);
}
</script>
</BODY>
我最后写的这个和你最先写的是有区别的,正如你所说:
document.all[]和getElementsByName()在同名的元素只有一个的时候的返回有差别:前者返回元素,后者返回只有一个元素的集合
而且在id不存在的时候,前者返回的值是null,后者是一个空的集合