Spec-Zone.ru › jQuery

.is()

.is( selector )Возвращает: Boolean

Описание: Проверяет текущий набор выбранных элементов по селектору, элементу или объекту jQuery и возвращает true, если хотя бы один из этих элементов соответствует заданным аргументам.

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

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

    • function
      Тип: Функция( Целое число index, Элемент element ) => Boolean
      Функция, используемая в качестве теста для каждого элемента в наборе. Она принимает два аргумента, index, который является индексом элемента в коллекции jQuery, и element, который является DOM-элементом. Внутри функции this ссылается на текущий DOM-элемент.
  • версия добавлена: 1.6.is( selection )

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

    • elements
      Тип: Элемент
      Один или несколько элементов для сопоставления с текущим набором элементов.

В отличие от других методов фильтрации, .is() не создает новый объект jQuery. Вместо этого он позволяет проверить содержимое объекта jQuery без модификаций. Это часто полезно внутри обратных вызовов, таких как обработчики событий.

Предположим, у вас есть список, два элемента которого содержат дочерний элемент:

<ul>
  <li>list <strong>item 1</strong></li>
  <li><span>list item 2</span></li>
  <li>list item 3</li>
</ul>

Вы можете добавить обработчик клика к элементу <ul>, а затем ограничить код, чтобы он срабатывал только тогда, когда нажимается сам элемент списка, а не один из его дочерних элементов:

$( "ul" ).on( "click", function( event ) {
  var target = $( event.target );
  if ( target.is( "li" ) ) {
    target.css( "background-color", "red" );
  }
});

Теперь, когда пользователь нажимает на слово "список" в первом элементе или где-либо во втором или третьем элементе, нажатый элемент списка получит красный фон. Однако, когда пользователь нажимает на элемент 1 в первом элементе или где-либо во втором элементе, ничего не произойдёт, потому что в этих случаях целевым элементом события будет <strong> или <span>, соответственно.

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

Вторая форма этого метода оценивает выражения, относящиеся к элементам, на основе функции, а не селектора. Для каждого элемента, если функция возвращает true, то .is() также возвращает 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>
</ul>

Вы можете добавить обработчик клика ко всем <li>, которые оценивают количество <strong> элементов внутри нажатого <li> в этот момент:

$( "li" ).on( "click", function() {
  var li = $( this ),
    isWithTwo = li.is(function() {
      return $( "strong", this ).length === 2;
    });
  if ( isWithTwo ) {
    li.css( "background-color", "green" );
  } else {
    li.css( "background-color", "red" );
  }
});

Примеры:

Показывает несколько способов использования is() внутри обработчика события.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>is demo</title>
  <style>
  div {
    width: 60px;
    height: 60px;
    margin: 5px;
    float: left;
    border: 4px outset;
    background: green;
    text-align: center;
    font-weight: bolder;
    cursor: pointer;
  }
  .blue {
    background: blue;
  }
  .red {
    background: red;
  }
  span {
    color: white;
    font-size: 16px;
  }
  p {
    color: red;
    font-weight: bolder;
    background: yellow;
    margin: 3px;
    clear: left;
    display: none;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<div></div>
<div class="blue"></div>
<div></div>
<div class="red"></div>
<div><br/><span>Peter</span></div>
<div class="blue"></div>
<p>&nbsp;</p>
 
<script>
$( "div" ).one( "click", function() {
  if ( $( this ).is( ":first-child" ) ) {
    $( "p" ).text( "It's the first div." );
  } else if ( $( this ).is( ".blue,.red" ) ) {
    $( "p" ).text( "It's a blue or red div." );
  } else if ( $( this ).is( ":contains('Peter')" ) ) {
    $( "p" ).text( "It's Peter!" );
  } else {
    $( "p" ).html( "It's nothing <em>special</em>." );
  }
  $( "p" ).hide().slideDown( "slow" );
  $( this ).css({
    "border-style": "inset",
    cursor: "default"
  });
});
</script>
 
</body>
</html>

Демо:

Возвращает true, потому что родитель инпута — элемент формы.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>is demo</title>
  <style>
  div {
    color: red;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<form>
  <input type="checkbox">
</form>
<div></div>
 
<script>
var isFormParent = $( "input[type='checkbox']" ).parent().is( "form" );
$( "div" ).text( "isFormParent = " + isFormParent );
</script>
 
</body>
</html>

Демо:

Возвращает false, потому что родитель инпута — элемент p.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>is demo</title>
  <style>
  div {
    color: red;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<form>
  <p><input type="checkbox"></p>
</form>
<div></div>
 
<script>
var isFormParent = $( "input[type='checkbox']" ).parent().is( "form" );
$( "div" ).text( "isFormParent = " + isFormParent );
</script>
 
</body>
</html>

Демо:

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

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>is demo</title>
  <style>
  li {
    cursor: pointer;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<ul id="browsers">
  <li>Chrome</li>
  <li>Safari</li>
  <li>Firefox</li>
  <li>Opera</li>
</ul>
 
<script>
var alt = $( "#browsers li:nth-child(2n)" ).css( "background", "#0ff" );
$( "li" ).on( "click", function() {
  var li = $( this );
  if ( li.is( alt ) ) {
    li.slideUp();
  } else {
    li.css( "background", "red" );
  }
});
</script>
 
</body>
</html>

Демо:

Альтернативный способ достижения вышеупомянутого примера с использованием элемента, а не объекта jQuery. Проверяет по существующей коллекции чередующихся элементов списка. Синие, чередующиеся элементы списка сдвигаются вверх, а остальные становятся красными.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>is demo</title>
  <style>
  li {
    cursor: pointer;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<ul id="browsers">
  <li>Chrome</li>
  <li>Safari</li>
  <li>Firefox</li>
  <li>Opera</li>
</ul>
 
<script>
var alt = $( "#browsers li:nth-child(2n)" ).css( "background", "#0ff" );
$( "li" ).on( "click", function() {
  if ( alt.is( this ) ) {
    $( this ).slideUp();
  } else {
    $( this ).css( "background", "red" );
  }
});
</script>
 
</body>
</html>

Демо:

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

Spec-Zone.ru

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