Разница между селектором CSS и фильтром jQuery? - PullRequest
6 голосов
/ 03 апреля 2012

В функцию jQuery можно передать селекторы CSS, например:

jQuery('h1 + h2');

jQuery также имеет некоторые фильтры, такие как :even и :odd:

jQuery('tr:even');

Я искал какое-то синтаксическое правило, которое различает два, и я думал, что, возможно, фильтры jQuery всегда используют :.

Однако некоторые CSS-селекторы также используют :. Например:

  • :last-child
  • :root
  • :empty
  • :target

Есть ли у кого-нибудь умные советы, чтобы узнать, используется ли это CSS-селектор или фильтр jQuery?

Ответы [ 3 ]

7 голосов
/ 31 мая 2012

Я искал какое-то синтаксическое правило, которое различает эти два, и я думал, что, возможно, фильтры 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().

0 голосов
/ 03 апреля 2012

Идея функции утилиты селектора jQuery заключается в том, чтобы принимать любой селектор css (включая селекторы css3) и в дополнение к этому добавлять несколько дополнительных, которые не определены в спецификации css (примеры которых: odd (который в допустимый css: nth-child (odd)) и: not (селектор), например). Настоятельно рекомендуется не не использовать специфичные для jquery селекторы, за исключением случаев, когда это действительно необходимо, поскольку собственные селекторы CSS могут обрабатываться (в современных веб-браузерах) гораздо быстрее, чем пользовательские jquery CSS. Как уже упоминал Гдорон, полный список вы можете найти в документации jquery , если вам нужно проверить, доступен ли конкретный селектор или нет, и вы также можете найти там собственные селекторы.

0 голосов
/ 03 апреля 2012

Да, этот селектор существует в jQuery
Селектор называется следующий соседний селектор

Полный список селекторов можно посмотреть здесь

У кого-нибудь есть какие-нибудь умные советы, чтобы узнать, используется ли это CSS-селектор или фильтр JQuery?

Мой совет, проверьте API, если селектор существует или нет ...

...