Проверка соответствия селектора элементам, отмеченным определенным классом

У меня есть общий селектор jQuery (строка):

var selector = '#files li div';

и имя класса:

var myClass = 'folder';

Я хочу проверить, соответствует ли селектор элементам, класс которых хранится в myClass. До сих пор я использовал экземпляр селектора для вызова метода hasClass():

var match = $(selector).hasClass(myClass);

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

Можете ли вы предложить что-то лучше?

‹EDIT›
В показанном примере я установил значение myClass в «папку», чтобы просто представить проблему, но в приложении я не знаю заранее, так как это определяется действиями пользователя.
‹/EDIT›


person yodabar    schedule 09.09.2011    source источник
comment
Если я не понимаю проблему, вы можете просто использовать #files li div.folder   -  person Corbin    schedule 09.09.2011
comment
Просто проверьте $('#files li div .folder').length   -  person m90    schedule 09.09.2011
comment
К сожалению нет, переменная myClass может содержать любое значение и я его заранее не знаю, оно определяется действиями пользователя через UI. В примере я установил «папку», чтобы лучше раскрыть вопрос.   -  person yodabar    schedule 09.09.2011
comment
Вы также можете использовать переменную в селекторе. Просто объедините строку по мере необходимости.   -  person m90    schedule 09.09.2011


Ответы (2)


hasClass() вернет true, если какой-либо из совпадающих элементов имеет указанный класс; нет, если это делают все.

Возможно, вы обнаружите, что вам больше нужно следующее:

var match = $(selector).filter('.' + myClass);

Но вы можете упростить его до:

var match = $(selector + '.' + myClass);

И затем вы должны проверить, остались ли у вас какие-либо элементы, используя атрибут .length.

if (match.length) // then some were matched!

Что касается беспокойства об использовании памяти... не надо. преждевременная оптимизация — корень всех зол. Использование памяти здесь минимальное. Если вы хотите оптимизировать свою программу (есть ли необходимость в данный момент?), посмотрите на функции, которые вызываются большое количество раз, или посмотрите на циклы, которые имеют большое количество итераций, или посмотрите на манипуляции с DOM и посмотрите, не их можно комбинировать; один селектор jQuery не будет иметь какой-либо разницы в скорости вашей программы в относительном выражении.

person Matt    schedule 09.09.2011
comment
Поиск, если выбор содержит почти один элемент, соответствующий этому классу, — это как раз то, что мне было нужно, поэтому я использовал hasClass(). Поэтому я, вероятно, думаю, что способ, который я использовал, является правильным. Спасибо! - person yodabar; 09.09.2011

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

person Amritpal Singh    schedule 09.09.2011