Я искал какое-то синтаксическое правило, которое различает эти два, и я думал, что, возможно, фильтры jQuery всегда используют :
.
Однако некоторые селекторы CSS также используют :
.
У кого-нибудь есть какие-нибудь умные советы, чтобы узнать, используется ли это CSS-селектор или фильтр jQuery?
Это одна из самых раздражающих вещей в библиотеках селекторов, использующих синтаксис CSS в своих собственных расширениях: потому что и фильтры на основе совпадений, и истинные псевдоклассы объединяются в общий термин, известный как «псевдоселекторы» (который в основном означает «селекторы, которые начинаются с :
»), единственный способ определить, является ли «псевдоселектор» фильтром или истинно простым селектором, зная, что он делает, что, если вы ' незнакомство с селектором часто означает обращение к документации jQuery , как упоминалось здесь другими. Вы заметите, что большинство этих фильтров на основе совпадений будет иметь слово «соответствие» где-то в своих описаниях; это разумный показатель того, что «псевдоселектор» работает как фильтр на основе совпадений.
В jQuery есть подкатегория селекторов, называемая Basic Filters , однако название полностью вводит в заблуждение, а сами селекторы плохо классифицированы; не все из них являются действительными фильтрами, но некоторые из них функционируют как стандартные псевдоклассы! По крайней мере, у категории jQuery Extensions есть собственное имя - потому что эти селекторы нестандартны.
То, что я называю «фильтром на основе совпадений», - это в основном селектор, который соответствует элементу на основе всего комплексного селектора, ведущего к этому селектору . Звук сбивает с толку? Это потому, что это так.
Фактически, для удобства, вот список селекторов jQuery, которые работают как фильтры на основе совпадений:
Эти селекторы возвращают n-й элемент (-ы) среди набора совпадений, в отличие от других стандартных селекторов, которые берут каждый элемент и делают выводы из того, что он основан исключительно на информации об элементе, предоставленной DOM или в противном случае, и не на основе остальной части строки селектора. Хотя их очень часто сравнивают с :first-child
, :last-child
, :nth-child()
и :nth-last-child()
, они сильно отличаются по функциональности. Будьте очень осторожны при выборе селектора для использования.
Например, следующий селектор, использующий jQuery's :first
:
$('ul > li:first')
Соответствует только одному элементу: первый элемент соответствует селектору ul > li
, независимо от количества элементов ul
и li
в DOM. Эта запись селектора может быть записана как вызов метода следующим образом:
$('ul > li').first()
Что делает его более понятным, что он на самом деле делает. Отличается от :first-child
:
$('ul > li:first-child')
При этом :first-child
будет выбирать каждый li
, который является первым дочерним элементом его родительского ul
, и поэтому может потенциально возвращать один или более li
элементов, а не один с :first
.
Также стоит упомянуть селектор :not()
; хотя я не считаю его тем же фильтром, что и вышеупомянутые селекторы, важно помнить, что jQuery расширяет его по сравнению с тем, что фактически предлагается в CSS. Различия подробно описаны в этом вопросе . Я полагаю, что он в любом случае относится к категории «Основные фильтры» из-за .not()
, который наиболее определенно для всех своих целей и целей является методом фильтрации, и противоположностью .filter()
.