IE7中的getElementsByName

问题描述 投票:17回答:7

我有一些代码可以这样做:

 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中无法正常工作。最好的解决方法是什么?

javascript dom internet-explorer-7
7个回答
17
投票

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

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


4
投票
有两个问题:

    IE确实使getElementsByTagName()<div id="Change0">...</div> <div id="Change1">...</div> <div id="Change2">...</div> <div id="Change3">...</div> 混淆

2
投票
使用NAME属性查找元素不是很常见。我建议切换到ID属性。

但是您可以使用jQuery查找具有特定名称的元素:


1
投票
getElementsByName,但存在错误。特别是,它返回“ id”与给定值匹配的元素以及“ name”。如果没有更多上下文,代码和实际错误消息,就无法确定这是否是您遇到的问题。

通常,最好避免使用getElementsByName,因为HTML中的'name'属性具有多个重叠的用途,可能会造成混淆。使用getElementById更可靠。当专门处理表单字段时,可以更可靠地使用form.elements [name]来检索您要查找的字段。


1
投票
我已经成功使用包装器返回了元素数组。也可以在IE 6和7中使用。请记住,它不是100%与document.getElementsByName完全相同,因为它不是NodeList。但是对于我所需要的,就是在元素数组上运行一个for循环以完成诸如set .disabled = true的简单操作,它就足够好了。

即使此函数仍使用getElementsByName,但如果以这种方式使用,它也可以工作。自己看看。


1
投票
解决方法

var changes = document.getElementById('text').getElementsByTagName('span'); for (var c=0; c<changes.length; c++) { var ch = changes[c]; if (ch.className != from) continue; var current = new String(ch.innerHTML);


1
投票
只是IE中的另一个DOM错误:

错误1: $("*[name='whatevernameYouWant']");

© www.soinside.com 2019 - 2024. All rights reserved.