我有一些代码这样做:

 var changes = document.getElementsByName(from);
 for (var c=0; c<changes.length; c++) {
   var ch = changes[c];
   var current = new String(ch.innerHTML);
   etc.
 }

在FF和Chrome中可以正常工作,但在IE7中则不能。大概是因为getElementsByName在IE中无法正常工作。最好的解决方法是什么?

最佳答案

如果您不知道为什么这在IE中不起作用,请使用the MSDN documentation on that function:

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");
当然,这是一种黑客手段,但是它可以完成您所需的工作,并且与其他一些黑客工具相比效率不会太低。
如果您正在使用某种JavaScript框架/工具包,那么您的选择会更好,但是除非您指出您正在使用,否则我没有时间来讨论这些细节。就个人而言,我不知道没有人的人如何生活,他们节省了太多的时间,精力和挫折感,以至于您负担不起不使用一个人的负担。

关于javascript - IE7中的getElementsByName,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/278719/

10-13 00:15