Liste séparée par des virgules des sélecteurs?
Je suis refactoring du code au moment de venir à travers un sélecteur:
jQuery("tr","#ctl00_MainContent_MyUserControl").each(function(i,row) { ... }
On dirait que c'est la sélection de <tr>
's du contrôle de l'utilisateur sur la page (ignorer le fait que l'instance est entièrement nom!) mais ce n'est pas une syntaxe que je suis familier avec et ne peuvent pas trouver quelque chose dans la documentation. Je m'attends à être écrit:
$("#ctl00_MainContent_MyUserControl tr").each(function(i,row) { ... }
Quelqu'un peut me dire si il y a une différence subtils (ou autre) que je suis en manque ici??
- La première syntaxe est utile dans les cas où le contexte est mis en cache et que vous voulez faire rapide des requêtes sur elle. Cependant, comme mentionné dans l'une des réponses, c'est euqal à $( '#...' ).find( 'tr' ). La seconde syntaxe est recommandé pour des raisons de lisibilité si le cache n'est pas important. Rappelez-vous que lorsque vous cache quelque chose, il va prendre de la mémoire, donc parfois la surcharge n'est pas la peine.
Vous devez vous connecter pour publier un commentaire.
Ce sélecteur sélectionne tous les
tr
éléments à l'intérieur d'un élément avec l'idctl00_MainContent_MyUserControl
. C'est exactement le même que celui de votre deuxième exemple.Le deuxième paramètre fournit un contexte pour le premier paramètre. Il y a de mieux en cas d'utilisation de cette syntaxe, par exemple:
Où
el
est un élément sur votre page. Dans ce cas, vous ne pouvez pas utiliser la deuxième forme de la syntaxe.$(el).find('tr')
? Si oui, une idée de qui est le plus performant?L'appel de la
jQuery()
méthode avec deux arguments (selector
etcontext
) est équivalent àjQuery(context).find(selector)
. Donc:est égale à:
qui se trouve être le même que:
Mon opinion personnelle est que l'utilisation de
context
n'a de sens que lorsque vous pouvez passer déjà un élément sélectionné (jQuery
ouDOM
), pas tellement quand vous venez de passer un sélecteur (String
). Dans ce cas, je préfère tout simplement pour imiter le sélecteur CSS: par exemple,#ctl00_MainContent_MyUserControl tr
.jQuery
est traité comme un sélecteur CSS, égale à la qualification detr, #ctl100… { … }
dans une feuille de style. I. e., tous<tr>
éléments et de l'élément avec l'IDctl1000…
. Du sens?C'est exactement la même. Il peut aussi écrire:
La syntaxe de l'ancien peut être vu dans le jQuery constructeur de la documentation. En gros, c'est "trouver tous les éléments qui correspond à la première sélecteur, c'est un descendant de la deuxième compensée par la seconde".
Le second argument du jQuery constructeur (lorsque le premier est un sélecteur) est le contexte.
À partir de l'API docs
Voir http://api.jquery.com/jQuery/