какой метод лучше всего в следующем коде:
$('#navs li').find('.activenav').removeClass('activenav');
$('#navs li').filter('.activenav').removeClass('activenav');
Или я могу так использовать
$('#navs li').find('.activenav').filter('.activenav').removeClass('activenav');
or
$('#navs li').filter('.activenav').find('.activenav').removeClass('activenav');
что произойдет, если я это сделаю?
Обновить
могу ли я привязываться к поиску и фильтру, поскольку мой код должен иногда находить и иногда нужно фильтровать
Метод find
ищет соответствующие элементы под текущим совпадающим элементом.
Метод filter
выполняет поиск совпадающих элементов в текущем наборе согласованных элементов.
Рассмотрим этот HTML:
<div class="foo">
<a class="foo">Bar</a>
</div>
И этот jQuery:
$('div').filter('.foo').hide(); // hides the div with the class "foo"
$('div').find('.foo').hide(); // hides the child anchor with the class "foo"
Обратите внимание, что оба результата приводят к скрытым элементам, но они нацелены на разные.
filter() – search through all the elements.
Уменьшите набор согласованных элементов до тех, которые соответствуют селектору или проходят проверку функции
find() – search through all the child elements only.
Получите потомки каждого элемента в текущем наборе согласованных элементов, отфильтрованных селектором.
Первые две строки не эквивалентны.
.find
ищет потомков текущего объекта jQuery, поэтому первая строка ищет всех дочерних элементов li
с этим классом.
.filter
создает новый объект jQuery, который содержит только те элементы исходного объекта, которые соответствуют селектору, поэтому вторая строка ищет все li
которые фактически имеют этот класс.
Учитывая, что первая альтернатива на самом деле является no-op (.filter
не будет удалять какие-либо элементы из набора), но второй неверен, потому что он сначала найдет любой li
с этим классом, а затем будет работать только с любыми детьми из тех элементов li
которые также имеют этот класс.
filter
фильтров вытекают из коллекции элементов, тогда как find
находит результаты от элемента (поиск с элементом как родительским).
Пример кода SO:
$("div").filter("#notify-container");
//Gives us a result, as we have a collection of 'div' elements and **filter** the already made collection to only include 'div' with the ID 'notification-container'
$("div").find("#notify-container")
//Gives us no results as it tries to find '#notify-container' elements **inside** the 'div' elements.