当前位置:  开发笔记 > 编程语言 > 正文

IE7中的getElementsByName

如何解决《IE7中的getElementsByName》经验,为你挑选了1个好方法。

我有一些代码这样做:

 var changes = document.getElementsByName(from);
 for (var c=0; c

这适用于FF和Chrome,但不适用于IE7.大概是因为getElementsByName在IE中不起作用.什么是最好的解决方法?



1> Jason Buntin..:

如果你不知道为什么它在IE中不起作用,这里是关于该功能的MSDN文档:

使用getElementsByName方法时,将返回文档中具有指定NAME属性或ID属性值的所有元素.

支持NAME属性和ID属性的元素包含在getElementsByName方法返回的集合中,但具有NAME expando的元素不包含在集合中; 因此,此方法不能用于按名称检索自定义标记.

Firefox允许getElementsByName()检索使用NAME expando的元素,这就是它工作的原因.这是否是一件好事可能需要辩论,但这是它的现实.

因此,一种选择是使用getAttribute()DOM方法来请求NAME属性,然后测试该值以查看它是否是您想要的,如果是,则将其添加到数组中.但是,这需要您遍历页面中的所有节点或至少在子部分内迭代,这不是最有效的.您可以通过使用类似的东西预先约束该列表getElementsByTagName().

另一种方法是,如果你控制页面的HTML,就是给所有感兴趣的元素一个Id,它只是按数字变化,例如:

...
...
...
...

然后像这样的JavaScript:

// assumes consecutive numbering, starting at 0
function getElementsByModifiedId(baseIdentifier) {
    var allWantedElements = [];
    var idMod = 0;
    while(document.getElementById(baseIdentifier + idMod)) { // will stop when it can't find any more
        allWantedElements.push(document.getElementById(baseIdentifier + idMod++));
    }
    return allWantedElements;
}

// call it like so:
var changes = getElementsByModifiedId("Change");

当然,这是一个黑客行为,但它可以完成你需要的工作,而不是与其他一些黑客相比效率太低.

如果您正在使用某种类型的JavaScript框架/工具包,那么您的选项要好得多,但我没有时间进入这些细节,除非您表明您正在使用它.就个人而言,我不知道人们如何生活没有之一,他们节省了这么多时间,精力和无奈地说,你买不起使用一个.


对不起,但**OP问题中的**是*有**设置*名称的提及*?我只看到代码声明OP试图通过使用`document.getElementsByName(name)`迭代检索的项目.我仍然支持我的陈述,即.(在所有旧版本中)`.getElementsByName(name)`的实现是不正确的.
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有