`

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等吧```  要不我们还要去负责和游览其厂商跟进

相关推荐

    document.getElementsByName()的用法

    如果找不到任何匹配的元素,则返回null。 **基本语法**: ```javascript var element = document.getElementById(id); ``` **示例**: 假设HTML中有以下元素: ```html &lt;div id="example"&gt;Hello World ``` 可以...

    IE中getElementsByName()对有些元素无效的解决方案

    本文将深入探讨IE中`getElementsByName()`方法对某些元素无效的问题及其解决方案。 `getElementsByName()`是JavaScript中用于获取文档中所有具有指定`name`属性的元素的集合。它返回一个NodeList对象,包含了页面上...

    让getElementsByName适应IE和firefox的方法

    通过上述方法,我们可以在不改变原有代码逻辑的基础上,实现`getElementsByName`在IE和Firefox等浏览器之间的兼容。这种方法不仅适用于`td`元素,还可以扩展到其他任何需要根据`name`属性查找的元素类型,只需在遍...

    innerHTML 和 getElementsByName 在IE下面的bug 的解决

    在IE浏览器中,尤其是IE9之前的版本,getElementsByName方法有时不能正确返回name属性匹配的元素。这可能与IE特有的DOM实现差异有关。这种行为导致在IE浏览器中利用getElementsByName进行DOM查询时,可能无法找到...

    详解JavaScript 中getElementsByName在IE中的注意事项

    详解JavaScript 中getElementsByName在IE中的注意事项 前言: 在IE5-9中是没有实现js的 getElementsByClassName()方法,但是实现了getElementsByName()方法,但是需要注意的是这个方法在IE5-9中也返回id属性匹配的指定...

    javascript在IE和Firefox中兼容性问题

    JavaScript是Web开发中不可或缺的一部分,尤其在处理动态交互和页面逻辑时。然而,由于不同的浏览器在实现JavaScript标准时可能存在差异,导致在不同浏览器之间存在兼容性问题。本篇将主要探讨JavaScript在Internet ...

    js在IE和Firefox不同之处

    ### js在IE和Firefox不同之处 在Web开发中,JavaScript(简称JS)是实现网页交互性的核心语言之一。然而,由于不同的浏览器对于JS标准的支持程度有所差异,这往往会导致跨浏览器兼容性问题的出现。IE(Internet ...

    javascript在firefox与ie下的兼容性总结

    JavaScript在Firefox和IE之间的兼容性问题一直是前端开发者面临的一大挑战。由于这两个浏览器内核的不同,导致在处理某些JavaScript特性时存在差异。以下是一些常见的兼容性问题及其解决方案: 1. **Document.form....

    Javascript的IE和Firefox兼容性参考

    以下是一些常见的JavaScript在IE和Firefox中的兼容性问题及解决方案: 1. **document.form.item问题** - 在IE中,可以通过`document.formName.item("itemName")`来访问表单元素,但在Firefox中不支持。推荐使用...

    document.getElementsByName和document.getElementById 在IE与FF中不同实现

    ^) 但是对于document.getElementsByName 与document.getElementById 这个两个方法,IE中是并没有严格区分 ID 与 Name 的,比如: [removed] function useGetElementsByNameWithId(id) { var eles = d

    火狐和IE支持javaScript脚本的一些区别

    在Firefox中,可以使用`getAttribute()`方法来获取元素的属性值,而在IE中,虽然也支持这种方法,但在某些情况下,直接使用属性名可能更方便。 ### 10. DOM节点的父级和子级 在处理DOM节点的父级和子级时,IE与...

    自定义 input radio 兼容ie6

    首先,我们要理解IE6不支持`:checked`伪类,这意味着我们不能通过CSS直接控制被选中的radio按钮的样式。为了解决这个问题,我们可以利用JavaScript或者jQuery来检测radio按钮的状态,并根据状态改变对应的样式。 ...

    前段JS开发和DOM兼容问题大全

    1. 在IE浏览器中可以使用`document.all`配合元素ID属性值来访问DOM节点,但在Firefox等其他浏览器中不支持此方法。标准的访问方式是使用`document.getElementById`、`document.getElementsByName`和`document....

    js在ie和FireFox下兼容问题汇总

    JavaScript 在不同浏览器之间的兼容性问题一直是开发者面临的重要挑战,尤其是IE和Firefox之间的差异。本文将详细探讨这些兼容性问题,并提供相应的解决方案。 1. `document.form.item` 问题: - 在IE中,可以通过...

Global site tag (gtag.js) - Google Analytics