`

IE7下getElementsByName得不到值的终极方案

阅读更多
  • IE7下,如果HTML元素是JS创建的,那么你采用document.getElementsByName()就得不到节点列表,怎么办?
  • getElementsByTagName() 可被用于任何的 HTML 元素,而getElementsByName()却不能,语法只能是document.getElementsByName(),并且好像不是W3C的标准,那么要方便得使用怎么办?

 

 

   那么看看这个方法吧:

// 取得 指定元素的 子节点列表 //
// 子元素可以指定 name //
// 子元素可以指定 tagName //

function child()
{
	// 取得指定元素的所有子元素中元素名为name的元素集合 (有name取name,无name取id )
	this.getChildsByName = function(element, name)
	{
		var state = "name";
		return this.getChilds(element, name, state);
	};
	// 取得指定元素的所有子元素中tagName为name的元素集合
	this.getChildsByTagName = function(element, name)
	{
		var state = "tagName";
		return this.getChilds(element, name, state);
	};
	// state为"name",取得 指定元素的 name为name子元素
	// state为"tagName",取得 指定元素的 tagName为name子元素
	this.getChilds = function(element, name, state)
	{
		
		return this.find(element, name, state);
		//return this.list_elment; // 返回集合
	};
	// 通用方法
	this.find = function(element, name, state)
	{
		var a = [];
		if (null == element) { return a; }
		var nodes = element.childNodes; // 所有子元素
		for ( var i = 0; i < nodes.length; i++)
		{
			if (nodes[i].nodeType == 1)
			{ //节点类型为1			
				var name_id = "";
				if (state == "name")
				{
					name_id = nodes[i].name == null ? nodes[i].id
					        : nodes[i].name; // 有name取name,无name取id
				}
				else if (state == "tagName")
				{
					name_id = nodes[i].tagName;
				}
				else
				{
					alert("请传参数,指定按name或tagName搜索元素!");
					return a;
				}
				if (name_id == name)
				{
					a.push(nodes[i]); // 加入集合
				}
				var bl = nodes[i].hasChildNodes(); // 有无下一层子元素
				if (bl)
				{
					a=a.concat(this.find(nodes[i], name, state)); // 递归
				}
			}
		}
		return a;
	};
}
//上下文单实例
$EC = new child();

 

如何使用?

$EC.getChildsByName(document,"name");
$EC.getChildsByName(document.getElementById("id"),"name");

$EC.getChildsByTagName(document,"input");
$EC.getChildsByTagName(document.getElementById("id"),"input");

//第一个参数是一个节点元素就行,可以随意获取该节点下的元素
 

方便不?让你爽到死,又兼容又方便,就是有时候效率会有点折扣。毕竟不能两全。呵呵

5
3
分享到:
评论
2 楼 iammonster 2009-07-31  
xxpniu 写道
其实可以考虑下使用Jquery等吧```  要不我们还要去负责和游览其厂商跟进

呵呵,jquery,倒是不敢用,包装的太严实了。
不如参照prototype,或者mootools,把控制全交给自己
1 楼 xxpniu 2009-07-31  
其实可以考虑下使用Jquery等吧```  要不我们还要去负责和游览其厂商跟进

相关推荐

Global site tag (gtag.js) - Google Analytics