0Pricing
jQuery Academy · Урок

Эффективные методы обхода DOM

Освойте методы .closest(), .siblings(), .find() и .parentsUntil(), чтобы эффективно перемещаться по дереву DOM и избегать узких мест производительности.

«Эффективные методы обхода DOM» — бесплатный урок jQuery Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения jQuery Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс jQuery Academy содержит 3 уроков всего.

Навигация по дереву DOM

Добро пожаловать! На этом уроке Вы освоите эффективные приёмы перемещения по объектной модели документа (DOM).

DOM похож на семейное дерево элементов веб-страницы. Понимание принципов его обхода позволяет точно выбирать элементы даже без прямых идентификаторов или классов.

  • Обход: перемещение по структуре или через неё.
  • DOM: внутреннее представление структуры HTML в браузере.

Поиск дочерних элементов с помощью .find()

Метод .find() идеально подходит для поиска дочерних элементов. Он ищет совпадения *внутри* текущих выбранных элементов.

Представьте, что Вы ищете определённые предметы внутри конкретной коробки. Это очень мощный способ сузить область поиска.

  • Синтаксис: $(selector).find(filterSelector)
  • Возвращает: новый объект jQuery, содержащий найденные дочерние элементы.

.find() в действии

Найдём все элементы списка (<li>) внутри определённого неупорядоченного списка (<ul>).

Запустите код и посмотрите, какие элементы получат зелёный фон!

<div id="container">
  <ul id="myList">
    <li>Item 1</li>
    <li class="active">Item 2</li>
    <li>Item 3</li>
  </ul>
  <p>Some other text</p>
  <ul id="anotherList">
    <li>Item A</li>
    <li>Item B</li>
  </ul>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    // Find all <li> elements within #myList
    $('#myList').find('li').css('background-color', 'lightgreen');

    // You can also chain with specific selectors
    $('#myList').find('.active').css('font-weight', 'bold');
  });
</script>

Подъём по структуре с помощью .closest()

Иногда нужно найти предка элемента (родительский элемент, элемент более высокого уровня и т. д.). Именно это делает метод .closest().

Он начинает с текущего элемента и перемещается *вверх* по дереву DOM, возвращая *первого* предка, соответствующего заданному селектору.

  • Синтаксис: $(selector).closest(filterSelector)
  • Возвращает: объект jQuery, содержащий единственного ближайшего предка.

.closest() в действии

Представьте, что Вы нажали кнопку глубоко внутри вложенной структуры. Нужно найти её основной контейнер. .closest() идеально подходит для этого.

Нажмите кнопку ниже, чтобы выделить ближайшего предка <div>.

<div class="grandparent">
  <div class="parent">
    <p>Some text here</p>
    <button id="myButton">Click Me</button>
  </div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#myButton').on('click', function() {
      // Find the closest ancestor div and add a border
      $(this).closest('div').css('border', '2px solid blue');
    });
  });
</script>

Работа с соседними элементами с помощью .siblings()

Элементы, находящиеся на одном уровне дерева DOM, называются «соседними». Метод .siblings() помогает выбрать их все.

Он находит все элементы с тем же родителем, что и текущий элемент, *исключая* сам текущий элемент.

  • Синтаксис: $(selector).siblings(filterSelector)
  • Возвращает: новый объект jQuery со всеми соседними элементами.

.siblings() в действии

Выделим всех соседей определённого элемента списка при нажатии на него. Это полезно для интерактивных списков или меню.

Нажмите на любой элемент списка, чтобы увидеть, как изменится цвет его соседей!

<ul id="menu">
  <li>Home</li>
  <li class="current">About</li>
  <li>Services</li>
  <li>Contact</li>
</ul>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    $('#menu li').on('click', function() {
      // Remove highlight from previously selected siblings
      $('#menu li').css('background-color', '');
      // Highlight the clicked item's siblings
      $(this).siblings().css('background-color', 'lightyellow');
      // Highlight the clicked item itself (optional)
      $(this).css('background-color', 'lightblue');
    });
  });
</script>

Подъём по структуре с помощью .parentsUntil()

Что делать, если нужно выбрать *несколько* предков, но остановиться в определённой точке? Здесь пригодится .parentsUntil().

Этот метод перемещается вверх по дереву DOM, выбирая всех предков текущего элемента, *пока* не встретит элемент, указанный селектором. Сам «остановочный» элемент в выборку не включается.

  • Синтаксис: $(selector).parentsUntil(stopSelector, filterSelector)
  • Возвращает: объект jQuery с выбранными предками.

.parentsUntil() в действии

У нас есть глубоко вложенная структура. Выберем все родительские элементы <span>, пока не встретим определённый <div class="container">.

Запустите этот пример, чтобы увидеть, какие элементы получат рамку. Обратите внимание: сам div „container“ пропущен!

<div class="body-wrapper">
  <div class="container">
    <div class="row">
      <section>
        <article>
          <p>Hello <span>World!</span></p>
        </article>
      </section>
    </div>
  </div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
  $(document).ready(function() {
    // Find all parents of 'span' until the '.container' div
    $('span').parentsUntil('.container').css('border', '1px dashed orange');
  });
</script>

Быстрая проверка

Элемент <img> вложен в <div class="gallery-item">, который находится внутри <div class="gallery-row">. Если выбрать <img>, какой метод jQuery следует использовать, чтобы получить *только* <div class="gallery-item">?

Итоги: эффективный обход DOM

Отличная работа! Вы освоили основные методы jQuery для эффективного обхода DOM:

  • .find(): ищет дочерние элементы *внутри* элементов.
  • .closest(): при движении *вверх* по дереву находит *ближайшего предка*, соответствующего селектору.
  • .siblings(): выбирает все элементы, находящиеся на *одном уровне* с текущим (кроме самого текущего элемента).
  • .parentsUntil(): выбирает нескольких предков *до* указанного остановочного элемента, не включая его.

Разумное использование этих методов помогает писать более точный, производительный и понятный код jQuery для динамических веб-приложений!

Часто задаваемые вопросы

Урок «Эффективные методы обхода DOM» бесплатный?

Да — полный текст урока «Эффективные методы обхода DOM» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс jQuery Academy, подпишись на CoddyKit PRO. Курс jQuery Academy содержит 3 уроков всего.

Чему я научусь в уроке «Эффективные методы обхода DOM»?

Освойте методы .closest(), .siblings(), .find() и .parentsUntil(), чтобы эффективно перемещаться по дереву DOM и избегать узких мест производительности. Ты практикуешь jQuery Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать jQuery Academy?

Предыдущий опыт не требуется. jQuery Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Эффективные методы обхода DOM»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке jQuery Academy?

Да. Каждый урок jQuery Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Расширенные селекторы атрибутов
  2. Псевдоклассы и пользовательские селекторы
  3. Эффективные методы обхода DOM
← Назад к jQuery Academy