我有一些代码这样做:
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)`的实现是不正确的.