-
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");
//第一个参数是一个节点元素就行,可以随意获取该节点下的元素
方便不?让你爽到死,又兼容又方便,就是有时候效率会有点折扣。毕竟不能两全。呵呵
分享到:
相关推荐
主要介绍了IE中getElementsByName()对有些元素无效的解决方案,很简单,很实用,需要的朋友可以参考下
详细介绍并对比了document.getElementsByName()和document.getElementByNId()的用法,并进行了深入的比较,还有例子加以讲解说明。
w3c规范中getElementsByName是按着name属性进行检索的,而MS的IE却是按着id来检索。导致不能得到应该得到的Elements,为适应浏览器,我们可以做一下调整: 一、把需要用getElementsByName的name都加上id,且id和...
详解JavaScript 中getElementsByName在IE中的注意事项 前言: 在IE5-9中是没有实现js的 getElementsByClassName()方法,但是实现了getElementsByName()方法,但是需要注意的是这个方法在IE5-9中也返回id属性匹配的指定...
innerHTML 真的一个麻烦的东西。IE 和 firefox 对dom 处理的方式不是很一样。IE 对动态加载的很多dom 不支持动态更新。
^) 但是对于document.getElementsByName 与document.getElementById 这个两个方法,IE中是并没有严格区分 ID 与 Name 的,比如: [removed] function useGetElementsByNameWithId(id) { var eles = d
要想循环遍历可以用forEach,但是在低于ie9的版本下不兼容 var list= document.getElementsByName("name"); for (var i = 0; i ; i++) { console.log(list[i].id); //second console output }
现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在 MF 下运行 (2)解决方法: 改用 document.formName.elements["elementName"] (3)其它 参见 2 2. 集合类对象问题 (1)现有问题: 现有代码...
定义和用法 getElementsByName() 方法可返回带有指定名称的对象的集合。 语法document.getElementsByName(name) 该方法与 getElementById() 方法相似,但是它查询元素的 name 属性,而不是 id 属性。 另外,因为一个...
当页面上的控件同名且多个的时候,你首先做的是什么?判断长度?的确,从程序的严密角度出发,我们是需要判断长度,而且有长度和没长度是两种引用方法.
代码如下:(wuhen注:document.all是ie特有的属性,不是万维网标准) 当页面上的控件同名且多个的时候,你首先做的是什么?判断长度?的确,从程序的严密角度出发,我们是需要判断长度,而且有长度和没长度是两种引用方法....
HTML DOM 定义了多种查找元素的方法,除了 getElementById() 之外,还有 getElementsByName() 和 getElementsByTagName()。
3、因为在html页面中,name不能唯一确定一个元素,所以方法的名称为getElementsByName而不是getElementByName <!DOCTYPE ...