Chaînage de sélecteurs multiples dans jQuery?

Normalement, lorsque j’utilise une classe en tant que sélecteur, j’essaie d’utiliser un sélecteur “id” pour qu’il ne recherche pas dans toute la page, mais uniquement dans une zone où la classe serait.

Cependant, j’ai une vue partielle avec du code dedans. Cette vue partielle (code commun) est encapsulée dans une balise de formulaire.

J’ai:

// load common code in from partial view
// load common code in from partial view

Maintenant, dans ce code commun, je dois attacher un plugin à plusieurs champs pour que je le fasse

 $('#Create .myClass').plugin({ options here}); $('#Edit .myClass').plugin({options here}); 

Donc c’est à peu près le même code. Je me demande s’il existe un moyen de le faire rechercher l’un ou l’autre des identifiants?

modifier

J’ai des problèmes quand j’ai des variables pour mes sélecteurs

  my.selectors = { A: '#Create', B: '#Edit', Plugin: ' .Plugin' }; $(selector.A+ selectors.Plugin, selector.B+ selectors.Plugin) 

Ne semble pas courir

Vous pouvez combiner plusieurs sélecteurs avec une virgule:

 $('#Create .myClass,#Edit .myClass').plugin({options here}); 

Ou si vous voulez en avoir un certain nombre, vous pouvez append une classe à tous vos éléments de formulaire, puis rechercher dans cette classe. Cela ne vous donne pas les économies de vitesse supposées restreindre la recherche, mais honnêtement je ne m’inquiéterais pas trop si j’étais vous. Les navigateurs font beaucoup de choses pour optimiser les opérations courantes derrière votre dos – le sélecteur de classes simple peut être plus rapide.

$("#Create").find(".myClass").add("#Edit .myClass").plugin({});

Utilisez $.fn.add pour concaténer deux ensembles.

Vous devriez pouvoir utiliser:

 $('#Edit.myClass, #Create.myClass').plugin({options here}); 

jQuery | Sélecteurs multiples

Je pense que vous pourriez voir des performances légèrement meilleures en procédant ainsi:

 $("#Create, #Edit").find(".myClass").plugin(){ // Options }); 

comme:

 $('#Create .myClass, #Edit .myClass').plugin({ options: here }); 

Vous pouvez spécifier un nombre quelconque de sélecteurs à combiner en un seul résultat. Ce combinateur multi-expressions est un moyen efficace de sélectionner des éléments disparates. L’ordre des éléments DOM dans l’object jQuery renvoyé peut ne pas être identique, car ils seront dans l’ordre des documents. Une alternative à ce combinateur est la méthode .add ().

  • Sélecteur multiple
  • Ajouter une méthode

Il y a déjà de très bonnes réponses ici, mais dans d’autres cas (pas cela en particulier), l’utilisation de la carte pourrait être la “seule” solution.

Surtout quand on veut utiliser des expressions rationnelles, autres que les standards.

Pour ce cas, cela ressemblerait à ceci:

  $('.myClass').filter(function(index, elem) { var jElem = $(elem); return jElem.closest('#Create').length > 0 || jElem.closest('#Edit').length > 0; }).plugin(...); 

Comme je l’ai déjà dit, cette solution pourrait être inutile, mais pour d’autres problèmes, c’est une très bonne option.