Разница между селектором CSS и фильтром jQuery?

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

jQuery('h1 + h2');

JQuery также имеет несколько фильтров, таких как :even а также :odd:

jQuery('tr:even');

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

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

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

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

3 ответа

Решение

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

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

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

Это одна из самых раздражающих вещей в библиотеках селекторов, использующих синтаксис CSS в своих собственных расширениях: потому что и фильтры на основе совпадений, и истинные псевдоклассы объединяются в общий термин, известный как "псевдоселекторы" (что в основном означает "селекторы"). которые начинаются с : "), единственный способ определить, является ли" псевдоселектор "фильтром или истинно простым селектором, - это узнать, что он делает, что, если вы не знакомы со селектором, часто означает обращение к документации jQuery, как упоминалось другими здесь. Вы заметите, что большинство этих фильтров на основе совпадений будет иметь слово "совпадение" где-то в своих описаниях, что является разумным показателем того, что "псевдоселектор" работает как фильтр на основе совпадений.

В jQuery есть подкатегория Селекторов, называемая Основными фильтрами, однако название полностью вводит в заблуждение, а сами селекторы плохо классифицированы; не все они являются действительными фильтрами, но некоторые из них функционируют как стандартные псевдоклассы! По крайней мере, у категории расширений jQuery есть собственное имя - потому что эти селекторы нестандартны.

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

На самом деле, для удобства, вот список селекторов jQuery, которые работают как фильтры на основе совпадений:

  • :eq()
  • :gt()
  • :lt()
  • :even
  • :odd
  • :first
  • :last

Эти селекторы возвращают 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(),

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

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

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

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

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

Другие вопросы по тегам