Je me demande si il existe un moyen d’avoir la logique « Ou » dans jQuery sélecteurs. Par exemple, je connais un élément est un descendant d’un élément avec la classe classA ou classB, et je veux faire quelque chose comme `` . JQuery fournit cette fonctionnalité ?
Réponses
Trop de publicités?À l'aide d'une virgule peut ne pas être suffisant si vous avez plusieurs jQuery objets qui doivent être jointes.
L' .ajouter() méthode permet d'ajouter les éléments sélectionnés à l'ensemble des résultats:
// classA OR classB
jQuery('.classA').add('.classB');
Il est plus bavarde que '.classA, .classB'
, mais vous permet de créer plus complexe sélecteurs comme suit:
// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));
J'ai écrit un incroyablement simple (5 lignes de code) plugin pour exactement cette fonctionnalité:
http://byrichardpowell.github.com/jquery-or/
Il permet effectivement de dire "obtenir cet élément, ou si cet élément n'existe pas, l'utilisation de cet élément". Par exemple:
$( '#doesntExist' ).or( '#exists' );
Alors que l'on a accepté la réponse fournit des fonctionnalités similaires à cela, si les deux sélecteurs (avant et après la virgule) existent, les deux sélecteurs sera retourné.
J'espère que cela s'avère utile à toute personne qui pourrait atterrir sur cette page via google.
Si vous êtes à la recherche pour l'utilisation de la norme de construction de l'élément = element1 || element2 où le JavaScript sera de retour le premier qui est truthy, vous pouvez faire exactement cela:
element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');
qui renvoie le premier élément qui est trouvé. Mais une meilleure façon serait probablement d'utiliser le sélecteur jQuery virgule construire (qui retourne un tableau d'éléments trouvés) de cette façon:
element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];
qui renvoie le premier élément trouvé.
J'utilise que de temps en temps pour trouver un élément dans une liste ou des valeurs par défaut de l'élément s'il n'existe aucun élément actif. Par exemple:
element = $('ul#someList').find('li.active, li:first')[0]
qui sera de retour tout li avec une classe d'actifs ou, devrait-il y avoir aucun, sera tout juste de retour de la dernière li.
Les deux marchent. Il y a un potentiel de performance des sanctions, même si, comme l' || va arrêter le traitement dès qu'il trouve quelque chose truthy alors que le tableau d'approche va essayer de trouver tous les éléments, même si il a trouvé un déjà. Puis de nouveau, à l'aide de la || construction susceptible d'avoir des problèmes de performance si cela doit passer par plusieurs sélecteurs avant de trouver celui qu'il va revenir, parce qu'il doit appeler le principal objet jQuery pour chacun (je ne sais pas vraiment si c'est une performance ou pas, il semble tout à fait logique qu'il pourrait l'être). En général, cependant, j'utilise la matrice de l'approche lorsque le sélecteur est plutôt une longue chaîne.