En caso de que no sabe por qué esto no está funcionando en el IE, aquí es the MSDN documentation on that function:
Cuando se utiliza el método getElementsByName, todos los elementos del documento que tiene el atributo de nombre especificado o ID el valor del atributo se devuelve.
Los elementos que admiten tanto el atributo NAME como el atributo ID se incluyen en la colección devuelta por el método getElementsByName, pero los elementos con un NAME expando no se incluyen en la colección; por lo tanto, este método no se puede usar para recuperar etiquetas personalizadas por nombre.
Firefox permite getElementsByName()
recuperar elementos que usan un NAME expando, por lo que funciona. Si eso es algo bueno o no, puede estar en debate, pero esa es la realidad.
Por lo tanto, una opción es utilizar el método DOM getAttribute()
para solicitar el atributo NAME y luego probar el valor para ver si es lo que desea y, de ser así, agregarlo a una matriz. Esto requeriría, sin embargo, iterar sobre todos los nodos en la página o al menos dentro de una subsección, que no sería la más eficiente. Puede restringir esa lista de antemano usando algo como getElementsByTagName()
quizás.
Otra forma de hacerlo, si tiene el control del código HTML de la página, es otorgando a todos los elementos de interés un Id que varía solo por número, p. Ej.:
<div id="Change0">...</div>
<div id="Change1">...</div>
<div id="Change2">...</div>
<div id="Change3">...</div>
Y luego tener JavaScript así:
// 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");
Eso es un truco, por supuesto, pero sería hacer el trabajo que necesita y no sea demasiado ineficiente en comparación con algunos otros cortes.
Si está utilizando un framework/kit de herramientas de JavaScript de algún tipo, sus opciones son mucho mejores, pero no tengo tiempo para entrar en esos detalles a menos que indique que está utilizando uno. Personalmente, no sé cómo vive la gente sin uno, ahorran tanto tiempo, esfuerzo y frustración que no puede pagar y no para usar uno.
Tomar la documentación de MSDN como la "implementación correcta" parece una postura extraña. El nombre no es ID. MSFT lo entendió mal, muy mal. Uno puede argumentar qué elementos deben tener nombres, pero devolver un elemento que no tiene un nombre es simplemente una tontería. (Se rumorea que esto está arreglado en el modo estándar de IE8) – scunliffe
La documentación de MSDN * es * la implementación correcta para IE 7: el cartel original decía que IE7 había roto su código, en caso de que no leyera su publicación. El OP aplicaba el atributo de nombre como un atributo expando en una etiqueta para la que no se permite el nombre, por lo que IE no lo devolvió, según la documentación. –
Lo siento, pero ** ¿dónde ** en la pregunta de OP hay * alguna mención * de * configuración * el nombre? Solo veo el código que indica que el OP intentaba iterar sobre los elementos recuperados utilizando 'document.getElementsByName (name)'. Todavía apoyo mi declaración de que la implementación de '.getElementsByName (name)' es incorrecta en IE (en todas las versiones heredadas). – scunliffe