Как обратиться ко второму элементу с одинаковым ID? — efim360.ru
Одной командой
document.querySelectorAll("#ТВОЙ_ID")[1]
Видео инструкция
В этом видео приводится пример обращения ко второму элементу с одинаковым ID на HTML-странице при помощи JavaScript. Ввод команд осуществляется в консоль браузера Google Chrome. Результат виден сразу.
Теория
Откуда появляется подобный вопрос? Давайте разбираться.
Логика работы атрибутов ID для всех HTML-элементов в документе предполагает, что все идентификаторы (ID) на одной странице ДОЛЖНЫ ИМЕТЬ СВОИ УНИКАЛЬНЫЕ ЗНАЧЕНИЯ. То есть разрабатывая документ (руками или программно) нужно сделать так, чтобы значение идентификатора не повторялось в документе. От этого будет зависеть логика работы приложения.
Если страница предполагает большое количество кнопок и форм управления для пользователя, то нужно очень точно обрабатывать поступающие события JavaScript. Представьте, что вы повесили событие на кнопку закрытия формы заказа (например, выход из корзины). Вы нацелились по идентификатору элемента кнопки, предполагая, что он уникальный и другого такого на этой странице нет. Кнопка идеально отрабатывает закрытие для пользователей и все они комфортно работают на сайте.
А теперь приходит ваш коллега по работе и вешает точно такой же ID на кнопку отправки заказа в интернет-магазин. Ну захотелось ему. Или просто ошибся в кнопках. Пользователь сидел, тратил время, кропотливо выбирал себе товары на выходные. Навёл мышку на кнопку «Оформить заказ», нажал и вся форма стёрлась и он перешёл на главную страницу. Как думаете? Каково ему будет? Правильный ответ — он очень расстроится и покинет ваш сайт навсегда.
Реальность
В реальной практике разработки может всплыть что угодно. Например, на одной странице будет более чем один идентификатор. Пускай их будет 2. То есть где-то на странице есть 2 элемента с одинаковыми ID. Круть!
<p>Вася</p> <p>Коля</p> <p>Дима</p> <p>Иван</p>
В нашем случае есть параграфы с одинаковыми идентификаторами id=»f»
Разметка с двумя ID — HTMLНе подготовленный разработчик по логике захочет получить элемент с «уникальным» ID. Он введёт команду:
document.getElementById("f")
Вроде всё логично — «Дай Элемент У Которого Идентификатор Равен F»
В ответ прилетает один элемент:
Один элемент с ID равным F — JavaScriptНас встречает Вася, а вот Иван куда-то запропал.
И вот именно в этот момент разработчик понимает, что нужно как-то обратиться ко второму элементу с одинаковым ID. А как это сделать? Классическая теория разбилась о жестокую действительность.
Решить задачу поможет метод querySelectorAll(selectors), который вернёт нам объект NodeList, который является массиво-подобным объектом. Метод принадлежит стандарту объектной модели документа и в частности «миксину ParentNode«.
Обратимся к документу document. У него вызовем метод querySelectorAll(). Передадим в качестве параметра CSS-селектор «#f». Решётка — это принадлежность к ID (как и URI-фрагменты), а точка — это принадлежность к классам. Команда вернёт нам прототип объекта NodeList.
document.querySelectorAll("#f")NodeList из двух элементов — JavaScript
Мы получим два элемента с индексами 0 и 1. Чтобы обратиться ко второму элементу с одинаковым ID нам нужно передать в квадратные скобки индекс 1.
document.querySelectorAll("#f")[1]
Мы можем легко проверить получение элемента, если добавим в команду геттер innerText.
document.querySelectorAll("#f")[1].innerText
Ссылки
Стандарт DOM — перевод на русский
Стандарт DOM — официальная страница стандарта
Миксин ParentNode
Получение доступа к ID элементов в DOM в качестве переменных window/global | by Daria Sidorova | NOP::Nuances of Programming
Первое, что я узнал, начав заниматься веб-разработкой: как управлять элементами по ID из JS, со ссылкой на элементы по ID
<div>So many to think about</div>
<script>
const so_many = document.getElemntByID('so_many')
</script>
можно:
1: изменить внутренний html элемента (innerHTML)
<div>So many to think about</div>
<script>
const so_many = document.getElemntByID('so_many')
so_many.innerHTML = "I'm flying without wings"
</script>
2. изменить стиль элемента
<div>So many to think about</div>
<script>
const so_many = document.getElemntByID('so_many')
so_many.style.backgroundColor = "green"
</script>
3. добавить дочерний узел для элемента
<div>So many to think about</div>
<script>
const so_many = document.getElemntByID('so_many')
so_many.appendChild(document.createTextNode('my text'))
</script>
4. удалить элемент из узла браузера
<div>So many to think about</div>
<script>
const so_many = document.getElemntByID('so_many')
const textNode = document.createTextNode('my text')
so_many.appendChild(textNode)
so_many.removeChild(textNode)
</script>
5. прикрепить и удалить event listeners для элемента.
<div>So many to think about</div>
<script>
const so_many = document.getElemntByID('so_many')
so_many.addEventListener('focus', (evt)=> {
//.. code here
})
so_msny.removeEventListener('focus')
</script>
* и т. д.
Теперь все изменится по-настоящему.
ID элементов сохраняются в качестве переменных global или window.
Что это значит?
Это значит, что при создании элементов с атрибутами id, получить доступ к этим атрибутам id можно через объект window или в качестве переменной global.
Допустим, у нас есть:
<div>So many to think about</div>
Это элемент HTMLDivElement с атрибутом id
, имеющим значение so_many
. Получить доступ к HTMLDivElement можно через so_many
в объекте window:
<script>
log(window.so_many)
</script>
или в качестве переменной global (как и со всеми свойствами window):
<script>
log(so_many)
</script>
Эта переменная ссылается на экземпляр элементов следующим образом:
<div>So many to think about</div>
<script>
const _so_many = document.getElemntById('so_many')
</script>
Переменная so_many
в window — это то же, что и_so_many
. Обе ссылаются на один и тот же экземпляр элемента div HTMLDivElement <div>So many to think about</div>
, которым можно управлять как с помощью window.so_many
, так и _so_many
. Будто браузер уже сделал document.getElemntById(...)
за нас.
С ID элемента в переменной window можно управлять элементами DOM:
<div>So many to think about</div>
<script>
// const so_many = document.getElemntById('so_many')
const textNode = document.createTextNode("Some Text")
window.so_many.appendChild(textNode)// or as global variable
so_many.appendChild(textNode)
</script>
Мы закомментировали // const so_many = document.getElemntById('so_many')
, а также получили доступ к элементу через Id so_many
в объекте window (или в качестве переменной global) и добавили туда текстовый узел.
Они также доступны в консоли DevTools:
>> so_many
<- > <div>So many to think about</div>>> so_many.appendChild(document.createTextNode("Some text from console"))
Прикрепление event listeners
>> so_many.addEventListener('click',(evt)=>alert('from console'))
При нажатии на элемент div получаем:
Изменение стиля элемента
>> so_many.style.backgroundColor = "green"
Наш фоновый цвет был белый, а код выше изменит его на зеленый. Нажмите Enter:
Фоновый цвет меняется на зеленый.
Изменение HTML элемента
>> so_many.innerHTML = "<b>Inner HTML from Console</b>"
До:
После нажатия на Enter:
Вы также можете поэкспериментировать с другими методами HTMLElement, чтобы узнать, как управлять элементом по ID через переменную window или global без лишнего document.getElementById(...)
.
Как же круто!!! Думаю, что перестану писать document.getElementById(...)
в следующих проектах :). Порой названия методов кажутся слишком длинными, и их просто не хочется писать 🙂
Однако использовать переменную window или global для получения доступа к элементам по ID нужно должным образом. Эту функцию следует использовать в интерактивном режиме, а не в реальном коде — Совет от Акселя Раушмайера.
Перевод статьи Chidume Nnamdi: Accessing Element IDs in DOM as window/global Variables
Атрибуты идентификатора HTML— GeeksforGeeks
В этой статье мы узнаем, как идентифицировать конкретный элемент HTML по его идентификатору с использованием атрибута идентификатора HTML , а также понимаем его реализацию на примерах.
Атрибут id — это уникальный идентификатор, который используется для указания документа. Он используется CSS и JavaScript для выполнения определенной задачи для уникального элемента. В CSS атрибут id используется с использованием символа # , за которым следует id. кавычки не обязательны в tag=» » во всех случаях. Но писать с кавычками — хорошая практика.
Синтаксис:
Примечание: Это глобальный атрибут, его можно использовать во всех тегах.
Пример 1: В этом примере мы просто стилизуем элемент с идентификатором «geeks».
HTML
|
Output:
Атрибут HTML id
Пример 2: В этом примере мы добавляем свойства стиля к определенному значению атрибута id, извлекая его значение id.
HTML
; |
Выход:
Добавление свойств стиля. любой тег HTML, но в HTML 4.01 есть некоторые ограничения на использование атрибутов id. Его нельзя использовать с тегами
Класс и идентификатор являются атрибутами HTML, которые могут быть назначены любому тегу HTML. Их можно использовать и управлять ими в HTML, CSS и JavaScript.
- Разница между классом и идентификатором в HTML
- Разница между классом и идентификатором в CSS
- Разница между классом и идентификатором JavaScript
Различие между классом и идентификатором в HTML
Каждый элемент HTML может иметь идентификатор и атрибут класса, однако разница заключается в следующем:
- Значение идентификатора должно быть уникальным во всем документе. Что касается класса, значение может быть одинаковым для нескольких элементов.
- Значение идентификатора не должно содержать пробелов (пробелов, табуляции и т. д.), а атрибут класса допускает значения, разделенные пробелами
Основной заголовок
Некоторый текст
ПРИМЕЧАНИЕ. И класс, и идентификатор могут содержать буквы, цифры, дефисы и символы подчеркивания, но первым символом всегда должна быть буква.
Разница между классом и идентификатором в CSS
В CSS небольшая разница между классом и идентификатором заключается в том, что перед их именем стоят специальные символы. Для идентификатора это фунт ”#” для класса это период ”.” :
# основной заголовок { размер шрифта: 45px; } .текст { цвет: #333; }
Основное различие между классом и идентификатором в CSS заключается в том, что они имеют разную специфичность селекторов. Идентификатор имеет более высокую специфичность, чем класс.
Глядя на следующий код, селектор id переопределит стили селектора класса, даже если селектор класса каскадируется после селектора id.
# основной заголовок { цвет: #000; } .текст { цвет: #333; }
Считается хорошей практикой использовать классы для стилизации элементов, а не идентификаторы. Одна из причин этого в том, что легче переопределить селектор класса, чем идентификатор.
Разница между классом и идентификатором в JavaScript
Между идентификатором и классом в JavaScript нет большой разницы. В основном они используются для выбора элементов DOM и доступа к их значениям.
В JavaScript элементы можно выбирать по имени класса или по идентификатору. Существуют разные способы использования классов и идентификаторов для выбора элементов DOM.
Чтобы выбрать элемент по идентификатору, вы можете использовать:
-
document.getElementById('elementId')
метод; -
document.querySelector('#elementId')
метод; -
window.elementId или window['element-id']
, если идентификатор использует тире.
Для выбора элемента по классу можно использовать:
-
document.