Справочник API
.has() в jQuery
Содержание статьи
-
Категории: Traversing › Filtering
Создает новый набор jQuery из элементов исходного набора, среди потомков которых имеются элементы, соответствующие заданному параметру.
Синтаксис и описание:
Добавлено в jQuery 1.4.has( selector )
Добавлено в jQuery 1.4.has( contained )
Метод .has() фильтрует набор jQuery, оставляя элементы, среди потомков которых (на любой глубине) есть хотя бы один, соответствующий селектору, либо содержащие конкретный переданный DOM-элемент.
В отличие от .filter(), который проверяет сами элементы набора, .has() проверяет их содержимое.
Возвращаемое значение: (объект) Набор jQuery — подмножество исходного.
Параметры:
selector – (строка) селектор для поиска среди потомков.
contained – (элемент DOM) конкретный элемент, наличие которого среди потомков проверяется.
Примечание:
Сам найденный потомок в результат не попадает — в наборе остаются элементы верхнего уровня (родители), удовлетворившие условию.
Примечание:
Селектор :has() и метод .has() для простых случаев дают одинаковый результат (
$('li:has(ul)')≈$('li').has('ul')), но :has() — часть выражения-селектора и участвует уже на этапе поиска, а .has() применяется к уже готовому набору jQuery.В jQuery 3.x и 4.0:
Метод не менялся, работает без изменений в 3.7.1 и 4.0. Селектор
:has()тем временем вошёл в спецификацию CSS и поддерживается всеми современными браузерами нативно, поэтому прямой нативный аналог —document.querySelectorAll('li:has(ul)').
Примеры:
Подсветить пункты списка, содержащие вложенный список.
$('li').has('ul').addClass('has-children');Проверить наличие конкретного элемента среди потомков.
var icon = document.querySelector('.icon-error'); $('.form-group').has(icon).addClass('has-error');Нативный аналог через CSS-селектор :has() (поддерживается современными браузерами).
document.querySelectorAll('li:has(ul)').forEach(function(li) { li.classList.add('has-children'); });