В чем разница между поиском и фильтром в jquery? [Дубликат]

0

какой метод лучше всего в следующем коде:

$('#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');

что произойдет, если я это сделаю?


Обновить

могу ли я привязываться к поиску и фильтру, поскольку мой код должен иногда находить и иногда нужно фильтровать

Теги:

5 ответов

6

Метод 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"

Обратите внимание, что оба результата приводят к скрытым элементам, но они нацелены на разные.

1

filter() – search through all the elements.

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

find() – search through all the child elements only.

Получите потомки каждого элемента в текущем наборе согласованных элементов, отфильтрованных селектором.

0

Первые две строки не эквивалентны.

.find ищет потомков текущего объекта jQuery, поэтому первая строка ищет всех дочерних элементов li с этим классом.

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

Учитывая, что первая альтернатива на самом деле является no-op (.filter не будет удалять какие-либо элементы из набора), но второй неверен, потому что он сначала найдет любой li с этим классом, а затем будет работать только с любыми детьми из тех элементов li которые также имеют этот класс.

0

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.
0

filter() выполняет поиск по массиву jQuery и ищет выбранный вами селектор, find() ищет всех детей с выбранным вами селектором

Обновить

Да, вы можете использовать как find(), так и filter(), как этот $('.myClass').find('.myChildClass').filter('.myFilterClass');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню