Différence entre le sélecteur CSS et le filtre jQuery?

il est possible de passer les sélecteurs CSS à la fonction jQuery telle que:

jQuery('h1 + h2');

jQuery a également certains filtres tels que :even et :odd :

jQuery('tr:even');

je cherchais une sorte de règle de syntaxe qui différencie les deux et je pensais que peut-être les filtres jQuery utilisent toujours un : .

cependant, certains sélecteurs CSS utilisent également un : . Par exemple:

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

est-ce que quelqu'un a des astuces pour savoir si c'est un sélecteur CSS ou un filtre jQuery qui est utilisé?

6
demandé sur BoltClock 2012-04-03 00:24:17

3 réponses

je cherchais une sorte de règle de syntaxe qui différencie les deux et je pensais que peut-être les filtres jQuery utilisent toujours un : .

cependant, certains sélecteurs CSS utilisent aussi un : .

est-ce que quelqu'un a des astuces pour savoir si c'est un sélecteur CSS ou un filtre jQuery qui est utilisé?

C'est l'un des plus choses ennuyeuses à propos des bibliothèques de sélecteurs adoptant la syntaxe CSS dans leurs propres extensions: parce que les deux filtres basés sur les correspondances et les pseudo-classes vraies sont regroupés dans un terme générique connu sous le nom de "pseudo-sélecteurs" (qui signifie essentiellement "sélecteurs qui commencent par un : "), la seule façon de dire si un "pseudo-sélecteur" est un filtre ou un vrai sélecteur simple est en sachant ce qu'il fait, ce qui si vous n'êtes pas familier avec le sélecteur signifie souvent se référer à le jQuery documentation comme mentionné par d'autres ici. Vous remarquerez que la plupart de ces filtres basés sur la correspondance auront le mot "correspondance" quelque part dans leurs descriptions; c'est un indicateur raisonnable qu'un "pseudo-sélecteur" fonctionne comme un filtre basé sur la correspondance.

il y a une sous-catégorie de sélecteurs dans jQuery appelé filtres de base , mais le nom est complètement trompeur et les sélecteurs eux-mêmes mal catégorisés; ce ne sont pas tous des filtres réels mais certains fonctionnent comme des pseudo-classes standard! Au moins la jQuery Extensions catégorie a un nom propre - parce que ces sélecteurs ne sont pas standard.

ce que j'appelle un" filtre basé sur la correspondance "est essentiellement un sélecteur qui correspond à un élément basé sur le sélecteur complexe entier menant à ce sélecteur . C'est confus? C'est parce qu'il est.

In en fait, pour faciliter les références, voici une liste des sélecteurs jQuery qui fonctionnent comme des filtres basés sur les correspondances:

ces sélecteurs renvoient le(s) élément (s) nième (s) parmi un ensemble d'allumettes, par opposition à d'autres, sélecteurs standards qui prennent chaque élément et font des déductions de ce qu'il est basé uniquement sur les informations sur l'élément, fournies par le DOM ou autrement, et non basé sur le reste de la chaîne de sélecteur. Alors qu'ils sont très souvent par rapport à :first-child , :last-child , :nth-child() et :nth-last-child() , ils sont très différents en termes de fonctionnalité. Soyez très prudent dans le choix du sélecteur à utiliser.

par exemple, le sélecteur suivant, utilisant le :first de jQuery:

$('ul > li:first')

correspond seulement un élément: le premier élément correspondant au sélecteur ul > li , quel que soit le nombre de ul et li il y a d'éléments dans le DOM. Cette notation de sélecteur peut être écrite comme un appel de méthode comme ceci:

$('ul > li').first()

ce qui rend beaucoup plus clair ce qu'il fait réellement. Il diffère de :first-child :

$('ul > li:first-child')

en ce que :first-child sélectionnera chaque li qui est le premier enfant de son parent ul , et peut donc éventuellement retourner un ou plus li éléments, par opposition à exactement celui avec :first .

vaut également la peine de mentionner le sélecteur :not() ; bien que je ne le considère pas comme le même genre de filtre que les sélecteurs ci-dessus, il est important de se rappeler que jQuery l'étend de ce qui est réellement offert dans CSS. Les différences sont détaillées dans cette question . J'imagine qu'il est classé sous les filtres de base de toute façon à cause de .not() , ce qui est très certainement pour toutes ses intentions une méthode de filtre, et l'antithèse de .filter() .

7
répondu BoltClock 2017-05-23 12:30:33

l'idée de la fonction utilitaire de sélection jQuery est d'accepter tout sélecteur css (y compris les sélecteurs css3) et en plus de cela ajouter quelques extra qui ne sont pas définis dans la spécification css (dont les exemples sont :Impair (qui dans les CSS valides est :nth-child(Impair)) et :not(selector) par exemple). Il est fortement conseillé de pas de ne pas utiliser les sélecteurs spécifiques jquery sauf si vraiment nécessaire car les sélecteurs CSS natifs peuvent être traités (dans les navigateurs modernes) beaucoup plus rapide que le jQuery CSS personnalisé. Comme gdoron déjà mentionné, vous pouvez voir la liste complète dans la documentation jquery si vous avez besoin de vérifier si un sélecteur spécifique est ou n'est pas disponible et vous pouvez trouver les sélecteurs personnalisés là aussi.

0
répondu David Mulder 2012-04-02 21:42:03

Oui, Ce sélecteur existe dans jQuery

Le sélecteur est appelé sélecteur adjacent suivant

vous pouvez voir la liste complète des sélecteurs ici

est-ce que quelqu'un a des astuces pour savoir si c'est un sélecteur CSS ou un filtre JQuery qui est utilisé?

Mon conseil, vérifier l'API, si le sélecteur existe ou pas...

0
répondu gdoron 2012-07-20 12:43:08