Выбор вторых дочерних элементов первых дочерних элементов div в JavaScript
Проблема: Получение элемента внутри другого элемента с использованием JavaScript
У меня есть HTML-код, который выглядит примерно так:
<div id="mainDiv"> <!-- Это то, что у меня есть -->
<div>
<div></div>
<div></div> <!-- Мне нужно получить этот элемент -->
</div>
<span></span>
<more stuff />
</div>
Я использую следующий код для получения элемента mainDiv
в переменной:
var mainDiv = document.getElementById('mainDiv');
Но мне также нужно получить второй div
, который находится внутри первого div
, внутри mainDiv
, и сохранить его в отдельную переменную.
Как я могу это сделать простым и кроссбраузерным способом?
4 ответ(ов)
Если вы хотите получить доступ к элементу внутри mainDiv
, вы можете использовать оба приведенных вами варианта.
Первый вариант:
var mainDiv = document.getElementById('mainDiv');
var x = mainDiv.children[0].children[1];
В этом коде вы сначала получаете элемент с id mainDiv
, а затем обращаетесь к первому дочернему элементу этого mainDiv
, после чего берете его второго дочернего элемента. Это способ, имеющий смысл, если структура вашего HTML гарантирует, что первый элемент всегда имеет по крайней мере двух дочерних элементов.
Второй вариант:
var mainDiv = document.getElementById('mainDiv');
var x = mainDiv.getElementsByTagName('div')[0].getElementsByTagName('div')[1];
Здесь вы используете метод getElementsByTagName
, чтобы получить все дочерние div
элементы внутри mainDiv
. Вы берете первый div
, а затем получаете его второй дочерний div
. Этот подход более гибкий, если структура вашего HTML может меняться и вы хотите использовать поиск по тегу.
Оба метода работают, но используйте тот, который больше соответствует вашей задаче и необходимой структуре DOM. Если вы хотите, чтобы код был более читаемым, рассмотрите возможность использования более понятных селекторов, таких как querySelector
.
Я бы предложил использовать одну строку чистого кода.
Это решение подходит для любых элементов и не ограничено названиями тегов в структуре. Однако важно сохранить количество элементов и иерархию.
var requiredDiv = document.getElementById('mainDiv').firstChild.firstChild.nextSibling;
Ваш код содержит небольшую ошибку: переменная mainDiv
написана с заглавной буквы, а в строке, где вы пытаетесь получить третий <div>
, вы используете maindiv
с маленькой буквы. В JavaScript переменные чувствительны к регистру, поэтому это может привести к ошибке.
Попробуйте изменить последнюю строку на:
var div = mainDiv.getElementsByTagName('div')[2]; // третий div
В результате ваш код будет выглядеть так:
var mainDiv = document.getElementById('mainDiv');
var div = mainDiv.getElementsByTagName('div')[2]; // третий div
Теперь он должен работать корректно и возвращать третий <div>
внутри mainDiv
. Если у вас появятся дополнительные вопросы или вам потребуется помощь, не стесняйтесь спрашивать!
Да, querySelector
доступен и может быть использован для выбора элементов на странице. Ваш код:
console.log(
mainDiv.querySelector(':nth-child(1) > :nth-child(2)'))
использует селектор :nth-child
, чтобы найти определенный дочерний элемент. В данном случае, вы ищете второй элемент внутри первого дочернего элемента mainDiv
. С учетом вашего HTML, это будет <div>come get me</div>
, поскольку он является вторым элементом внутри первого дочернего <div>
элемента.
Несколько замечаний:
- Убедитесь, что
mainDiv
правильно инициализирован (например, с помощьюdocument.getElementById('mainDiv')
). - Возможно, вам придется учесть, что нумерация в
:nth-child
начинается с 1.
Если вам нужно выбрать этот элемент напрямую, вы можете использовать следующий код:
const mainDiv = document.getElementById('mainDiv');
const targetDiv = mainDiv.querySelector('div > div:nth-child(2)');
console.log(targetDiv);
Этот код найдет второй дочерний div
внутри первого div
, который находится в mainDiv
, и выведет его в консоль.
Потеряно HTML-кодирование при чтении атрибута из поля ввода
jQuery/JavaScript: Замена битых изображений
Предварительный просмотр изображений перед загрузкой
Как создать WYSIWYG-редактор на HTML/JS? [закрыто]
Как выполнить код после сброса HTML-формы с помощью jQuery?