2010-07-12 17 views
0

Je ne suis pas sûr si je fais quelque chose de mal ici ou pas, mais j'ai besoin de baser l'état de plusieurs objets sur le statut d'un autre. Donc je suis fondamentalement en train d'itérer sur les parents, puis d'amener leurs enfants et d'itérer sur eux pour obtenir leurs enfants etc. Cependant, je ne sais pas comment ajouter des objets jquery sur un objet résultat jquery.Comment ajouter des objets à l'objet résultat jquery?

Mon code ressemble à ceci (où bubbleDown dit objet de résultat):

while (i < bubbleDown.length) { 
    var curRow = bubbleDown[i]; 
    child = curRow.getAttribute('class') //etc 
    parent = curRow.getAttribute('class') //etc 
    bubbleDown.add($('.' + child + ':not(.' + parent.replace(' ', '.') + ')')); 
    i++; 
} 

J'ai caché une certaine logique en raison de ce ne pas être applicable à ma question. Quoi qu'il en soit, cela ne fonctionne pas, et pas parce que le jquery échoue à renvoyer des objets. Quelqu'un peut-il aider?

+0

qui est si bizarre et déroutant .., je veux me frapper la tête dans un mur! – jAndy

+0

Heh, j'utilise la classe pour suivre les relations parent-enfant: o –

+0

que voulez-vous faire avec les éléments? – galambalazs

Répondre

2

La plus simple approche est que .add() prend un sélecteur déjà, il suffit d'utiliser que la surcharge et la mise à jour de garder référence à l'objet à utiliser the one .add() returns:

var newBubbleDown = $(bubbleDown); 
while (i < bubbleDown.length) { 
    var curRow = bubbleDown[i]; 
    child = curRow.getAttribute('class') //etc 
    parent = curRow.getAttribute('class') //etc 
    newBubbleDown = newBubbleDown.add('.' + child + ':not(.' + parent.replace(' ', '.') + ')'); 
    i++; 
} 
//use newBubbleDown 

Je ne peux pas simplifier plus loin que je suis pas sûr de votre logique à l'extérieur, par exemple d'où i vient, ce child et parent sont utilisés pour, etc Mais appelez simplement .add(selector), sans lui donner un objet jQuery et vous êtes tous ensemble.

Nous utilisons un nouvel objet ici depuis .add() renvoie une référence à un nouvel objet jQuery (celui que vous ne l'utilisez), de sorte que chaque .add() ajoute des éléments, crée un objet jQuery qui les contient, il est jeté sur la prochaine boucle. Au lieu de cela, vous devez mettre à jour la référence afin qu'elle continue à accumuler des éléments comme vous le souhaitez. J'ai tendance à changer l'implémentation .add() pour agir sur le tableau courant dans la plupart de mes projets car c'est plus utile de cette façon qui ferait fonctionner votre code original, par exemple).

Note: cela ne ajouter des éléments à l'objet jQuery newBubbleDown, mais votre :not() utilisation me demande si cela correspond à vos besoins, il ne supprimerait pas les éléments dans tous les cas, il va seulement trouvez les éléments correspondant à ce sélecteur et ajoutez-les au tableau. Si vous devez exclure des éléments déjà dans le tableau, vous aurez besoin de .filter().

+0

Cela ne semble rien ajouter à l'objet. –

+1

'.add' ne mute pas l'objet jQuery. Il renvoie un nouveau. –

+0

@Roatin - Bon point ... Je change en fait '.add()' de sorte qu'il * mute * (plus utile la plupart du temps IMO), j'ai tendance à oublier que l'API ne le fait pas par défaut. –

0

vous devez faire cela sur un élément jquery-objet:

var curRow = $(bubbleDown[i]); 

ou vous pouvez utiliser la méthode each(): (alors que l'indice contient l'indice actuel de l'article)

bubbleDown.each(function(index){ 
    var child = $(this).attr('class')... 
    ... 
    bubbleDown.add(...); 
}); 

utilisation var pour initialiser vos variables pour éviter les problèmes avec IE par exemple.

+0

Ce n'est pas juste dans ce cas. 'bubbleDown [i]' renvoie l'élément DOM et le code appelle une méthode API native contre cet élément dans les deux lignes suivantes. – user113716

+0

vraiment? Je ne le savais pas.peut-être cela fonctionne en utilisant jquery – helle

+0

helle - Votre nouvel exemple devrait produire le même résultat que la question, sauf que vous utilisez '.append()' qui est utilisé pour ajouter/déplacer un élément à un certain point dans le DOM. L'OP semble vouloir les ajouter au même objet jQuery 'bubbleDown' qui est en cours d'itération. – user113716