2010-11-04 4 views
2

Je ne sais pas si cela est possible, mais je veux créer un plusieurs vars dynamiquement, par exemple, ce sont les vars que je crée manuellement,boucle jquery pour créer multiple dynamique vars

var left_1 = $('.column-global.left .item-global').eq(0); 
var left_2 = $('.column-global.left .item-global').eq(1); 
var left_3 = $('.column-global.left .item-global').eq(2); 

mais le problème est que j'ai seulement besoin de deux ou une vars ci-dessus parfois. mais trois est le maximum.

donc je pense à passer un paramètre dans la fonction de dire le code pour créer 2 ou 3 vars,

// I declare empty vars first 
var left_1; 
var left_2; 
var left_3; 

// get the number from somewhere, from the class for instnace 
var last_class = $(this).attr("class").split(' ').slice(-1); 

// loop the number with for loop 
for(var i = 1; i <= last_class; i++){ 
    left_1 = $('.column-global.left .item-global').eq(i-1); 
} 

mais vous remarquerez que je suis bloqué - comment puis-je boucler le var dans la {} de la boucle for?

Fondamentalement, je veux la boucle pour produire les multiples vars comme ceux-ci (comme ci-dessus),

var left_1 = $('.column-global.left .item-global').eq(0); 
var left_2 = $('.column-global.left .item-global').eq(1); 
var left_3 = $('.column-global.left .item-global').eq(2); 

est-il possible ??

merci.

p.s.

quelques réponses ici suggérant un tableau, mais j'ai un autre problème plus loin ...

bcos Je dois aussi passer les vars dans une autre fonction qui est maintenue dans cette fonction de parent comme celui-ci,

another_function(left_1, left_2, left_3); 

alors comment puis-je y parvenir avec la matrice? merci

+0

Avez-vous eu des raisons de ne pas utiliser un tableau? – jelbourn

+0

Comment utiliser un tableau pour la situation ci-dessus? Merci. – laukok

+0

Un objet jQuery est (effectivement) un tableau. Cela n'a aucun sens de stocker des éléments enveloppés individuellement dans un tableau, lorsque vous les avez déjà encapsulés collectivement dans un tableau jQuery. – user113716

Répondre

1

Pourquoi ne pas utiliser un tableau?

var left = [] 

for(var i = 1; i <= last_class; i++){ 
    left[i] = $('.column-global.left .item-global').eq(i-1); 
} 

ou plus probablement, puisque les tableaux sont 0-basés:

for(var i = 0; i < last_class; i++){ 
    left[i] = $('.column-global.left .item-global').eq(i); 
}i 
+0

bonne idée! Merci. Je vais essayer! Merci. – laukok

+0

désolé je dois passer les vars dans une autre fonction comme ceci, – laukok

+0

loop_item (left_1, left_2, left_3); alors comment puis-je réaliser cela avec le tableau? merci – laukok

2

Au lieu de courir le même sélecteur 3 fois et en tirant l'élément que vous voulez un à la fois, pourquoi ne pas courir juste une fois et stocker cet objet jQuery?

var $globals = $('.column-global.left .item-global') 

Puis vous pouvez utiliser n'importe quel élément (s) dont vous avez besoin quand vous voulez.

$globals.eq(1).doSomething(); 

Ou parce qu'un objet jQuery est un objet Array-like, vous pouvez obtenir chaque élément DOM individuel par index, comme:

$globals[1] // to get the actual non-jQuery wrapped DOM element 

EDIT: En ce qui concerne la mise à jour Dans votre question, je voudrais d'abord retravailler la fonction si possible pour accepter 1 objet jQuery.

Si ce n'est pas possible, et que vous avez juste besoin de passer des arguments individuels, je ferais l'une des deux choses suivantes.

Première idée.

Si possible, changer la fonction afin qu'il puisse accepter des éléments DOM, puis les envelopper l'intérieur la fonction:

var $globals = $('.column-global.left .item-global'); 

another_function.apply(this, $globals.get()); 

another_function(left_1, left_2, left_3) { 
     // Wrap the DOM elements 
    for(var i = 0, len = arguments.length; i < len; i++) { 
     arguments[ i ] = $(arguments[ i ]); 
    } 
    // ...the rest of the code 
} 

En appelant votre another_functionwith .apply(), vous êtes en mesure de fournir un tableau de arguments, qui seront affectés aux différents paramètres de la fonction.

Ici nous avons utilisé jQuery's .get() method pour passer un tableau d'éléments DOM.

Deuxième idée.

Si vous absolument doit accepter des éléments DOM emballés individuellement, faire la même chose que ci-dessus, mais créer le tableau d'éléments emballés individuellement comme ceci:

var $globals = $('.column-global.left .item-global').map(function() { 
    return $(this); 
}); 

another_function.apply(this, $globals.get()); 

Il utilise .map() pour créer un objet jQuery de objets jQuery, puis utilise .get() pour retirer le tableau hors de l'objet. Mais vraiment je changerais another_function si possible.

+0

merci pour cela. Je travaille dessus avec vos suggestions. Merci! :-) – laukok

+0

@lauthiamkok - De rien. Faites moi savoir si vous avez des questions. : o) – user113716

+0

désolé, essayé de faire les $ globals comme vous l'avez suggéré mais je ne sais toujours pas comment l'obtenir à droite bcos je passe un certain nombre de variables différentes dans d'autres fonctions de la fonction parente. Vous pouvez jeter un oeil ici sur les fonctions que je travaille sur - http://www.jsfiddle.net/7huET/ – laukok

Questions connexes