欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

获得指定对象下的指定名称对象集合

程序员文章站 2022-05-24 20:07:50
...

这篇是纯属给朋友帮忙了,他要获得一个 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>