Селектор jQuery против фильтра () - PullRequest
7 голосов
/ 11 августа 2010

Учитывая следующую разметку

<ul class="list">
    <li>first item</li>
    ​<li class="item">second item</li>
    <li>third item</li>
</ul>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

Какое из этих двух выражений лучше выбрать второе li?

$("ul li.item")

или

$("ul li").filter(".item")

Этоне очень хороший пример, потому что это слишком просто (я знаю, что мог бы делать $(".item"), но в целом, должен ли я использовать сложные селекторы или функцию фильтра?

EDIT : Еслипервое более эффективно, когда уместно / лучше всего использовать функцию фильтра?

1 Ответ

18 голосов
/ 11 августа 2010

Первый быстрее:

$("ul li.item")

Это верно просто потому, что это эквивалентно, но не запускает двигатель селектора (Sizzle) дважды, чтобы попасть туда.

Для редактирования: Вы используете .filter() ... хорошо, когда вам нужно отфильтровать текущий набор или когда вам нужен сложный фильтр. Например, если вы хотите связать, но не выбираете набор снова:

$("ul li").addClass('everyItem').filter('.item').fadeOut();

Или сложный фильтр:

$("ul li").filter(function() {
  return $.data(this, 'hasSomething');
}).fadeOut();

Существует много применений фильтра, это действительно зависит от ситуации, которая подходит лучше всего. Что касается вашего вопроса, то, однако, $(selector).filter(selector) ... Я не могу вспомнить случай, когда вы захотите сделать это с одним селектором, если это вообще возможно. Единственный случай с моей головы, который вы не можете сделать, это сложный :has() и :not() упаковка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...