Spec-Zone.ru › jQuery

.closest()

Содержание:

  • .closest( selector )
    • .closest( selector )
    • .closest( selector [, context ] )
    • .closest( selection )
    • .closest( element )
  • .closest( selectors [, context ] )
    • .closest( selectors [, context ] )

.closest( selector )Возвращает: jQuery

Описание: Для каждого элемента в наборе получить первый элемент, соответствующий селектору, проверив сам элемент и перемещаясь вверх по его предкам в дереве DOM.

  • версия добавлена: 1.3.closest( selector )

    • selector
      Тип: Селектор
      Строка, содержащая выражение селектора для сопоставления элементов.
  • версия добавлена: 1.4.closest( selector [, context ] )

    • selector
      Тип: Селектор
      Строка, содержащая выражение селектора для сопоставления элементов.
    • context
      Тип: Элемент
      Элемент DOM, в пределах которого может быть найден соответствующий элемент.
  • версия добавлена: 1.6.closest( selection )

    • selection
      Тип: jQuery
      Объект jQuery для сопоставления элементов.
  • версия добавлена: 1.6.closest( element )

    • element
      Тип: Элемент
      Элемент для сопоставления элементов.

Учитывая объект jQuery, представляющий набор элементов DOM, метод .closest() просматривает эти элементы и их предков в дереве DOM и создает новый объект jQuery из соответствующих элементов. Методы .parents() и .closest() аналогичны тем, что оба перемещаются вверх по дереву DOM. Однако различия, хотя и тонкие, значительны:

.closest() .parents()
Начинается с текущего элемента Начинается с родительского элемента
Перемещается вверх по дереву DOM, пока не найдет соответствие заданному селектору Перемещается вверх по дереву DOM до корневого элемента документа, добавляя каждый родительский элемент во временную коллекцию; затем фильтрует эту коллекцию на основе селектора, если он задан
Возвращаемый объект jQuery содержит ноль или один элемент для каждого элемента исходного набора, в порядке документа Возвращаемый объект jQuery содержит ноль или более элементов для каждого элемента исходного набора, в обратном порядке документа
<ul id="one" class="level-1">
  <li class="item-i">I</li>
  <li id="ii" class="item-ii">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

Предположим, мы выполнили поиск по <ul> элементам, начиная с элемента А:

$( "li.item-a" )
  .closest( "ul" )
  .css( "background-color", "red" );

Это изменит цвет уровня-2 <ul>, так как он первый встреченный при движении вверх по дереву DOM.

Предположим, мы ищем элемент <li> вместо него:

$( "li.item-a" )
  .closest( "li" )
  .css( "background-color", "red" );

Это изменит цвет пункта списка А. Метод .closest() начинает поиск с самого элемента перед продвижением вверх по дереву DOM и останавливается, когда элемент А соответствует селектору.

Мы можем передать элемент DOM в качестве контекста, в пределах которого следует искать ближайший элемент.

var listItemII = document.getElementById( "ii" );
$( "li.item-a" )
  .closest( "ul", listItemII )
  .css( "background-color", "red" );
$( "li.item-a" )
  .closest( "#one", listItemII )
  .css( "background-color", "green" );

Это изменит цвет уровня-2 <ul>, так как это ближайший <ul> предок элемента А и потомок элемента II. Однако он не изменит цвет уровня-1 <ul>, поскольку он не является потомком элемента II.

Примеры:

Показать, как можно выполнить делегирование событий с помощью closest. Ближайший элемент списка переключает желтый фон при щелчке по нему или его потомку.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>closest demo</title>
  <style>
  li {
    margin: 3px;
    padding: 3px;
    background: #EEEEEE;
  }
  li.highlight {
    background: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<ul>
  <li><b>Click me!</b></li>
  <li>You can also <b>Click me!</b></li>
</ul>
 
<script>
$( document ).on( "click", function( event ) {
  $( event.target ).closest( "li" ).toggleClass( "highlight" );
});
</script>
 
</body>
</html>

Демо:

Передайте объект jQuery в closest. Ближайший элемент списка переключает желтый фон при щелчке по нему или его потомку.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>closest demo</title>
  <style>
  li {
    margin: 3px;
    padding: 3px;
    background: #EEEEEE;
  }
  li.highlight {
    background: yellow;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<ul>
  <li><b>Click me!</b></li>
  <li>You can also <b>Click me!</b></li>
</ul>
 
<script>
var listElements = $( "li" ).css( "color", "blue" );
$( document ).on( "click", function( event ) {
  $( event.target ).closest( listElements ).toggleClass( "highlight" );
});
</script>
 
</body>
</html>

Демо:

.closest( selectors [, context ] )Возвращает: Массивверсия устарела: 1.7, удалена: 1.8

Описание: Получить массив всех элементов и селекторов, сопоставленных с текущим элементом до дерева DOM.

  • версия добавлена: 1.4.closest( selectors [, context ] )

    • selectors
      Тип: Массив
      Массив или строка, содержащая выражение селектора для сопоставления элементов (также может быть объектом jQuery).
    • context
      Тип: Элемент
      Элемент DOM, в пределах которого может быть найден соответствующий элемент.
Эта сигнатура (только!) устарела начиная с jQuery 1.7 и удалена в jQuery 1.8. Она в основном предназначена для внутреннего использования или разработчиков плагинов.

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/closest

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API