Как я могу заставить jQuery $ ('. Class', context) включать сам контекст, если он соответствует .class? - PullRequest
4 голосов
/ 18 марта 2010

Я хочу иметь возможность сопоставления со всеми элементами в данном контексте , включая сам элемент контекста.
Вот код, который я использую в настоящее время, но он кажется неэффективным. Есть ли лучший способ?
Примечание: я использую jQ 1.3.2, но скоро обновлюсь, поэтому меня тоже интересуют версии 1.4.

var context = $('#id');   
var filters = '.class1, .class2';

// take context itself if it matches filters
$(context).filter(filters)
// add anything matching filters inside context
.add($(filters, context))

Примечание: .add($(f,c)) работает в jQ 1.3 как .add(f,c) в jQ 1.4

Ответы [ 2 ]

3 голосов
/ 18 марта 2010

Вы можете сделать это:

$(context).find('*').andSelf().filter(filters)

.andSelf () добавляет предыдущий элемент в стек, в данном случае контекст. Но ... я не уверен, что это действительно лучше, чем ваш нынешний подход, с фильтрацией он немного медленнее. Я думаю, что вы только что попали в ситуацию, которая выглядит не очень красиво, было бы неплохо, если бы .andSelf() взял селектор, тогда вы могли бы сделать:

$(context).find(filters).andSelf(filters)

Тем не менее, улучшение не так уж и велико.

2 голосов
/ 26 января 2013

Похоже, идея @Nick Craver была запущена в производство. Функция jQuery addBack () заменила andSelf() и принимает селектор.

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