2011-01-27 3 views
1

Évidemment, c'est une bonne idée de stocker des sélecteurs jQuery dans les variables si elles sont utilisées plus d'une fois (et non une bonne idée si vous les utilisez une seule fois).Comment stocker plusieurs sélecteurs jQuery dans une variable javascript?

Ma question est, comment pouvez-vous stocker plusieurs sélecteurs, qui sont utilisés de façon interchangeable, dans une variable. Par exemple, disons que je sélectionne $('#object1, #object2), puis plus tard je sélectionne $ ('# object1'). Comment créer une variable qui peut être combinée avec d'autres variables pour créer plusieurs sélecteurs.

Si je devais l'écrire comme ceci:

var object1 = "#object1"; 
var object2 = "#object2"; 

$(object1 + "," + object2); 

Je ne ferais que faisant référence à la chaîne #object1, et non le sélecteur réel.

Alors, comment stocker plusieurs sélecteurs dans des variables, afin qu'ils puissent être utilisés de manière interchangeable?

+0

Quel est le problème avec ce code? Je pense que cela fonctionnerait très bien. – kprevas

+0

il stocke juste une chaîne en tant que var, pas le sélecteur réel. – Jared

+2

Pour être précis, le sélecteur * est * la chaîne, alors que vous faites référence à un objet jQuery. –

Répondre

8

Le problème n'est pas le selector string, le problème est la requête de l'élément DOM. "Problème" signifie que c'est cher. C'est pourquoi vous ne devriez interroger un élément qu'une seule fois et y stocker une référence.

var object1 = $('#object1'), 
    object2 = $('#object2'); 

object1.some_method(); 

mise à jour

En ce qui concerne votre commentaire:

jQuery offre la méthode .add()help qui permet de concaténer des objets jQuery:

object1.add(object2).method(); 
+0

C'est assez facile à faire, mais comment appliquer 'some_method();' à '# object1' et' # object2'? – Jared

+0

Merci pour la mise à jour, c'est ce qui me manquait! – Jared

3

Pas tout à fait sûr que je Comprends ce que tu veux dire. Vous voulez stocker les objets jQuery pour ne pas avoir à les rechercher continuellement comme une sorte de cache?

var cache = new Object(); 
cache['#object1'] = $('#object1'); 
cache['#object2'] = $('#object2'); 

Pour récupérer les valeurs jQuery, vous auriez simplement devez appeler cache['#object1'].

+1

Je vous recommande d'utiliser le littéral Object, '{}' pour initialiser un objet plutôt que de créer une nouvelle instance d'Object. Par exemple. 'cache var = {};' Cela s'exécute plus rapidement et enregistre quelques octets. –

+0

Pensé que c'était la même chose. Merci pour le conseil. – Neil

1

Vous pouvez utiliser .add():

var object1 = $('#object1'), object2 = $('#object2'); 

object1.add(object2).addClass('couple'); 

Ou,

var multiple = [object1[0], object2[0], ...]; 

$(multiple).addClass('party'); 
0

un sélecteur est une chaîne lorsqu'il est passé à $() fn. renvoie une collection d'éléments correspondant au sélecteur. Donc, il n'y a rien de mal avec ce code.

Votre code peut aussi être écrit,

var object1 = "#object1", 
    object2 = "#object2"; 

$(object1).add(object2).doSomething(); 

ou il peut encore être optimisée,

var object1 = $('#object1'), 
    object2 = $('#object2'); 

object1.add(object2).doSomething(); 

doSomething peut être un plugin jQuery ou jQuery méthode définie.

0

Pourquoi n'utilisez-vous pas le moyen facile.

var severalVar = 'h1,h2,h3,h4,h5,h6'; 
$(severalVar).hide() 
Questions connexes