Spec-Zone.ru › jQuery

.filter()

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

Описание: Уменьшает набор сопоставленных элементов до тех, которые соответствуют селектору или удовлетворяют условию функции.

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

    • selector
      Тип: Селектор
      Строка, содержащая выражение селектора для сопоставления текущего набора элементов.
  • версия добавлена: 1.0.filter( function )

    • function
      Тип: Функция( Целое число индекс, Элемент элемент ) => Булево
      Функция, используемая для проверки каждого элемента в наборе. this — текущий DOM-элемент.
  • версия добавлена: 1.4.filter( elements )

    • elements
      Тип: Элемент
      Один или несколько DOM-элементов для сопоставления с текущим набором элементов.
  • версия добавлена: 1.4.filter( selection )

    • selection
      Тип: jQuery
      Существующий объект jQuery для сопоставления с текущим набором элементов.

Учитывая объект jQuery, представляющий набор DOM-элементов, метод .filter() создает новый объект jQuery из подмножества соответствующих элементов. Поставленный селектор проверяется относительно каждого элемента; все элементы, соответствующие селектору, будут включены в результат.

Представьте страницу со списком:

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
  <li>list item 6</li>
</ul>

Мы можем применить этот метод к набору элементов списка:

$( "li" ).filter( ":nth-child(2n)" ).css( "background-color", "red" );

В результате вызова фоновый цвет элементов 2, 4 и 6 станет красным, так как они соответствуют селектору.

Использование функции фильтрации

Вторая форма этого метода позволяет нам фильтровать элементы по функции, а не по селектору. Для каждого элемента, если функция возвращает true (или значение, рассматриваемое как истинное), элемент включается в отфильтрованный набор; в противном случае — исключается. Предположим, у нас есть более сложный фрагмент HTML:

<ul>
  <li><strong>list</strong> item 1 - one strong tag</li>
  <li><strong>list</strong> item <strong>2</strong> -
    two <span>strong tags</span></li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
  <li>list item 6</li>
</ul>

Мы можем выбрать элементы списка, а затем отфильтровать их по содержимому:

$( "li" )
  .filter(function( index ) {
    return $( "strong", this ).length === 1;
  })
    .css( "background-color", "red" );

Этот код изменит только первый элемент списка, так как он содержит ровно один <strong> тег. Внутри функции фильтра this ссылается на каждый DOM-элемент по очереди. Передаваемый параметр функции сообщает нам индекс этого DOM-элемента в наборе, соответствующем объекту jQuery.

Мы также можем воспользоваться параметром index , переданным через функцию, который указывает нулевую позицию элемента в неотфильтрованном наборе сопоставленных элементов:

$( "li" )
  .filter(function( index ) {
    return index % 3 === 2;
  })
    .css( "background-color", "red" );

Это изменение кода приведет к выделению третьих и шестых элементов списка, так как используется оператор модуля (%) для выбора каждого элемента с index значением, которое при делении на 3 даёт остаток 2.

Примечание: Когда в .filter() передается строка CSS-селектора, текстовые и комментарийные узлы всегда удаляются из результирующего объекта jQuery во время процесса фильтрации. Когда предоставляется конкретный узел или массив узлов, текстовый или комментарийный узел будет включен в результирующий объект jQuery только в том случае, если он соответствует одному из узлов в массиве фильтра.

Примеры:

Изменить цвет всех div; затем добавить рамку к тем, у которых есть класс "middle".

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>filter demo</title>
  <style>
  div {
    width: 60px;
    height: 60px;
    margin: 5px;
    float: left;
    border: 2px white solid;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<div></div>
<div class="middle"></div>
<div class="middle"></div>
<div class="middle"></div>
<div class="middle"></div>
<div></div>
 
<script>
$( "div" )
  .css( "background", "#c8ebcc" )
  .filter( ".middle" )
    .css( "border-color", "red" );
</script>
 
</body>
</html>

Демо:

Изменить цвет всех div; затем добавить рамку ко второму (индекс == 1) и div с id "fourth".

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>filter demo</title>
  <style>
  div {
    width: 60px;
    height: 60px;
    margin: 5px;
    float: left;
    border: 3px white solid;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<div id="first"></div>
<div id="second"></div>
<div id="third"></div>
<div id="fourth"></div>
<div id="fifth"></div>
<div id="sixth"></div>
 
<script>
$( "div" )
  .css( "background", "#b4b0da" )
  .filter(function( index ) {
    return index === 1 || $( this ).attr( "id" ) === "fourth";
  })
    .css( "border", "3px double red" );
</script>
 
</body>
</html>

Демо:

Выбрать все div и отфильтровать выбор с помощью DOM-элемента, сохраняя только тот, у которого есть id "unique".

$( "div" ).filter( document.getElementById( "unique" ) );

Выбрать все div и отфильтровать выбор с помощью объекта jQuery, сохраняя только тот, у которого есть id "unique".

$( "div" ).filter( $( "#unique" ) );

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

Spec-Zone.ru

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