这篇是纯属给朋友帮忙了,他要获得一个 TABLE 内不同 TD 下name值相同的span,问我getElementsByName咋取不到,按我的经验getElementsByName只能取同名的表单元素,所以写了个小递归逐级向下寻找,找到的话就push进数组,本例并没有经过严格测试,有类似需要的朋友请自行修改。如果使用框架的话有另外的写法,这里没有使用框架,就是一个小函数。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
</HEAD>
<BODY>
<TABLE id='mytable' border='1' width='200'>
<TR><TD><span name='sortspan'>11<span name='sortspan'>66</span></span></TD></TR>
<TR><TD><span name='sortspan'>22</span></TD></TR>
<TR><TD><span name='sortspan'>33</span></TD></TR>
<TR><TD><span name='sortspan'>44</span></TD></TR>
<TR><TD><span name='sortspan'>55</span></TD></TR>
</TABLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var mytable = document.getElementById('mytable');
var subArr = [];
/**
* 获得指定对象下的指定名称对象集合,递归
*
* @param arr 最终要返回的数组对象
* @param container 容器对象
* @param subName 子对象名称
*/
function getObjs(arr, container, subName){
// 如果当前对象没有子对象则返回空
if(!container.childNodes) return null;
// 取得当前对象的子对象
var subs = container.childNodes;
// 循环子对象集合
for(var i=0,j=subs.length;i<j;i++){
if(!subs[i] || subs[i].nodeType!=1){
continue;
}
if(subs[i].name==subName){
arr.push(subs[i])
}else if(subs[i].childNodes || subs[i].childNodes.length!=0){
}
getObjs(arr, subs[i], subName);
}
}
// 在这里得到对象集合,存在subArr中
getObjs(subArr, mytable, "sortspan");
alert("最终得到对象长度:"+subArr.length)
var msg = [];
// 这里alert所获得的所有对象的innerHTML
for(var i=0,j=subArr.length;i<j;i++){
msg.push(subArr[i].innerHTML)
}
alert("最终获得的所有对象的innerHTML:\n\n"+msg.join("\n"))
//-->
</SCRIPT>
</BODY>
</HTML>
?