Если вы не знаете, почему это не работает в IE, вот документация MSDN по этой функции :
Когда вы используете метод getElementsByName, возвращаются все элементы в документе, которые имеют указанный атрибут NAME или значение атрибута ID.
Элементы, которые поддерживают как атрибут NAME, так и атрибут ID, включаются в коллекцию, возвращаемую методом getElementsByName, но элементы с расширением NAME не включаются в коллекцию; поэтому этот метод нельзя использовать для получения пользовательских тегов по имени.
Firefox позволяет getElementsByName()
извлекать элементы, использующие расширение NAME, поэтому оно работает. Является ли это хорошей вещью или нет, может быть спорным, но это реальность этого.
Итак, один из вариантов - использовать метод DOM getAttribute()
, чтобы запросить атрибут NAME, а затем проверить значение, чтобы определить, является ли оно тем, что вы хотите, и, если да, добавить его в массив. Однако для этого потребуется перебирать все узлы на странице или, по крайней мере, в подразделе, что не будет наиболее эффективным. Вы могли бы заранее ограничить этот список, используя что-то вроде getElementsByTagName()
возможно.
Другой способ сделать это, если вы контролируете HTML-код страницы, - это присвоить всем интересующим вас элементам идентификатор, который изменяется только по номеру, например ::
.
<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, ваши варианты намного лучше, но у меня нет времени разбираться в этих особенностях, если вы не укажете, что используете их. Лично я не знаю, как люди живут без него, они экономят столько времени, усилий и разочарований, что вы не можете позволить себе , а не , чтобы использовать его.