@xxvxx
....

Как получить элементы до ID или класса?

Есть структура
<ul>
   <li>
   <li>
   <li>
   <li id="item">
   <li>
   <li>
</ul>

Как получить все элементы li до id="item" на JS
  • Вопрос задан
  • 128 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Где элементы находятся, какой id выступает в роли ограничителя:

const parent = document.querySelector('ul');
const id = 'item';

Получаем элементы:

const elems = Array.from(parent.children);
const index = elems.findIndex(n => n.id === id);
const result = index === -1 ? elems : elems.slice(0, index);

// или

const result = [...parent.querySelectorAll(`:not(#${id}, #${id} ~ *)`)];

// или

const result = [];
for (
  let el = parent.firstElementChild;
  el && el.id !== id;
  el = el.nextElementSibling
) {
  result.push(el);
}
Ответ написан
Комментировать
@KaneUA
Есть как минимум два способа это сделать

1. Перебирать элементы от текущего и до начала родительского тега, используя свойство previousSibling. Ссылка на документацию в MDN.

// Находим элемент с нужным id
let currentElement = document.getElementById("item");
// Создаём массив для элементов
let allElements = [];
// Пока у нас есть элемент, с которым можно работать, продолжаем это делать
while(currentElement) {
   // Добавляем текущий элемент в массив
   allElements.push(currentElement);
   // Получаем предыдущий соседний элемент.
   // Если такого нет, то будет null и цикл прервётся
   currentElement = currentElement.previousSibling;
}


2. Найти родительский элемент и перебирать дочерние элементы, пока не найдём с нужным id. Документация на MDN по parentElement и children.

// Элемент, от которого отталкивается
let startingElement = document.getElementById("item");
// Его родитель
let parentElement = startingElement.parentElement;
// Массив для элементов
let allElements = [];
// Перебираем дочерние элементы
for(let i = 0; i < parentElement.children; i++) {
   // Добавляем перебираемый элемент в массив
   allElements.push(parentElement.children[i]);
   // Проверяем, соответствует ли id искомому
   if(parentElement.children[i].id === "item") {
      // Если да, прерываем цикл
      break;
   }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы