Как я могу получить коллекцию элементов, указав их атрибут id
? Я хочу получить имя всех тегов, которые имеют те же id
в html.
Я хочу использовать ТОЛЬКО getElementById()
для получения массива элементов. Как я могу это сделать?
Как я могу получить коллекцию элементов, указав их атрибут id
? Я хочу получить имя всех тегов, которые имеют те же id
в html.
Я хочу использовать ТОЛЬКО getElementById()
для получения массива элементов. Как я могу это сделать?
спецификация HTML требовала, чтобы атрибут ID
был уникальным на странице:
Этот атрибут присваивает имя элементу. Это имя должно быть уникальным в документе.
Если у вас несколько элементов с одинаковым идентификатором, ваш HTML недействителен.
Итак, getElementById()
должен возвращать только один элемент. Вы не можете заставить его возвращать несколько элементов.
Существует несколько связанных функций, которые возвратят массив элементов - getElementsByName
или getElementsByClassName
, который может больше соответствовать вашим требованиям, хотя getElementsByClassName
является новым для HTML 5, который все еще находится в черновике.
Почему вы хотели бы сделать это, это вне меня, так как id должен быть уникальным в документе. Тем не менее, браузеры, как правило, довольно слабы в этом, поэтому, если вы действительно должны использовать getElementById для этой цели, вы можете сделать это следующим образом:
function whywouldyoudothis() {
var n = document.getElementById("non-unique-id");
var a = [];
var i;
while(n) {
a.push(n);
n.id = "a-different-id";
n = document.getElementById("non-unique-id");
}
for(i = 0;i < a.length; ++i) {
a[i].id = "non-unique-id";
}
return a;
}
Однако это глупо, и я бы не стал доверять этому, чтобы он работал на всех браузерах навсегда. Хотя спецификация HTML DOM определяет id как readwrite, проверяющий браузер будет жаловаться, если сталкивается с более чем одним элементом с тем же идентификатором.
РЕДАКТИРОВАТЬ: При наличии действующего документа такой же эффект может быть достигнут таким образом:
function getElementsById(id) {
return [document.getElementById(id)];
}
Нельзя иметь несколько элементов с тем же id
. id
используется как индивидуальный идентификатор. Для групп элементов используйте class
и getElementsByClassName
.
Я знаю, что это старый вопрос и что HTML-страница с несколькими идентификаторами недопустима. Тем не менее, я столкнулся с этими проблемами, когда вам нужно соскрести и переформатировать другую документацию API HTML, содержащую дубликаты идентификаторов (недопустимый HTML).
Итак, для кого-то еще, вот код, который я использовал для решения проблемы, используя querySelectorAll:
var elms = document.querySelectorAll("[id='duplicateID']");
for(var i = 0; i < elms.length; i++)
elms[i].style.display='none'; // <-- whatever you need to do here.
Идентификатор должен быть уникальным, вместо этого используйте атрибут "имя" и "getelementsbyname", и у вас будет свой массив.
document.querySelectorAll("#yourId");
возвращает все элементы с идентификатором yourId
Как утверждали другие, вы не должны иметь один и тот же идентификатор более одного раза в своем HTML, однако... элементы с идентификатором прикрепляются к объекту документа и к окну в Internet Explorer. См. Также:
Элементы дерева DOM с идентификаторами становятся глобальными переменными?
Если в вашем HTML существует более одного элемента с тем же идентификатором, это свойство присоединяется как массив. Извините, но я не знаю, где искать, если это стандартное поведение или, по крайней мере, вы получаете такое же поведение между браузерами, что я сомневаюсь.
Вы не должны этого делать, и даже если это возможно, оно не является надежным и подверженным проблемам.
Причина в том, что идентификатор уникален на странице. то есть вы не можете иметь более одного элемента на странице с тем же идентификатором.
Класс более чем достаточно для ссылки на все, что вы хотите, потому что он может иметь имя с одним из слов больше:
<input class="special use">
<input class="normal use">
<input class="no use">
<input class="special treatment">
<input class="normal treatment">
<input class="no special treatment">
<input class="use treatment">
что способ применения разных стилей с помощью css (и Bootstrap - лучший пример), и, конечно, вы можете называть
document.getElementsByClassName("special");
document.getElementsByClassName("use");
document.getElementsByClassName("treatment");
document.getElementsByClassName("no");
document.getElementsByClassName("normal");
и т.д. для любой группировки, в которой вы нуждаетесь.
Теперь, в самом последнем случае, вы действительно хотите группировать элементы по id. Вы можете использовать и ссылаться на элементы, используя числовое сходство, но не равное id:
<input id=1>
<input id="+1">
<input id="-1">
<input id="1 ">
<input id=" 1">
<input id="0x1">
<input id="1.">
<input id="1.0">
<input id="01.0">
<input id="001">
Таким образом, вы можете узнать числовой идентификатор, получить доступ и получить элемент, просто добавив лишние недействительные числовые символы и вызывая функцию, чтобы получить (путем разбора и т.д.) исходный индекс из его значения, идентифицирующего правовую строку. Это полезно, если вы:
Имеют несколько строк с похожими элементами и хотят обрабатывать свои события когерентно. Независимо от того, удаляете ли вы один или почти все из них. Поскольку числовая ссылка все еще присутствует, вы можете повторно использовать их и переназначить его удаленный формат.
Выполнить идентификаторы классов, имен и тэгов.
Хотя вы можете использовать пробелы и другие общие признаки, даже если это не строгое утверждение в браузерах, не рекомендуется их использовать, особенно если вы собираетесь отправлять эти данные в других форматах, таких как JSON. Вы даже можете справиться с такими вещами с помощью PHP, но это плохая практика, прикрывающая грязные методы программирования.
мы можем использовать document.forms [0].Controlid
Если вы используете d3 для обработки нескольких объектов с тем же классом /id
Вы можете удалить подмножество элементов класса, используя d3.selectAll( ". classname" );
Например, график пончика здесь на http://medcorp.co.nz использует копии дугового объекта с именем класса "arc", и есть одна строка d3, d3.selectAll( ". arc" ). remove(); для удаления всех этих объектов;
используя document.getElementById( "arc" ). remove(); удаляет только один элемент и должен быть вызван несколько раз (как и в случае с предложениями выше, он создает цикл для удаления объектов n раз)