如果您不知道为什么这在 IE 中不起作用,这里是有关该功能的 MSDN 文档:
使用 getElementsByName 方法时,将返回文档中具有指定 NAME 属性或 ID 属性值的所有元素。
支持 NAME 属性和 ID 属性的元素包含在 getElementsByName 方法返回的集合中,但具有 NAME expando 的元素不包含在集合中;因此,此方法不能用于按名称检索自定义标签。
Firefox 允许getElementsByName()
检索使用 NAME expando 的元素,这就是它起作用的原因。这是否是一件好事™ 可能有待讨论,但这就是现实。
因此,一种选择是使用getAttribute()
DOM 方法请求 NAME 属性,然后测试该值以查看它是否是您想要的,如果是,则将其添加到数组中。但是,这需要您迭代页面中的所有节点或至少在一个小节内迭代,这不是最有效的。您可以通过使用类似的东西预先限制该列表getElementsByTagName()
。
另一种方法是,如果您控制页面的 HTML,则为所有感兴趣的元素提供一个仅随数字变化的 Id,例如:
<div id="Change0">...</div>
<div id="Change1">...</div>
<div id="Change2">...</div>
<div id="Change3">...</div>
然后有这样的 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");
当然,这是一种 hack,但它可以完成您需要的工作,并且与其他一些 hack 相比效率不会太低。
如果您正在使用某种 JavaScript 框架/工具包,那么您的选择要好得多,但除非您表明正在使用,否则我没有时间深入探讨这些细节。就个人而言,我不知道人们如何生活没有之一,他们节省了这么多时间,精力和挫折,你不能承受不来使用的。