2010-07-27 4 views
0

Considérez ceci:Comparer tableaux jQuery avec plusieurs éléments DOM

<div class="test">one</div> 
<div class="test">two</div> 

<script> 

var i1 = $('.test'); 
var i2 = $('.test'); 

console.log(i1 == i2); 
console.log(i1 === i2); 
console.log(i1.is(i2)); 

</script> 

Ils ont tous l'impression faux bien qu'ils contiennent les mêmes éléments. On pourrait penser que .is() fonctionnerait pour comparer mais il doesnt. Comment compareriez-vous deux objets jQuery?

+0

http://jsfiddle.net/frcb9/ – Reigel

Répondre

3

Nous pouvons utiliser .not()

var i1 = $('.test'); 
var i2 = $('.test'); 
alert(i1.not(i2).get().length == 0); //alerts true 
+0

C'est ça. J'ai utilisé '! I1.not (i2) .length' et cela semble fonctionner correctement. – David

+0

+1 idée de couperet! – Reigel

+0

Je pense que cela échouerait si i2 avait plus d'éléments que i1, donnant un TRUE où FALSE était attendu – alcuadrado

1

i1 et i2 sont des objets distincts créés par le constructeur jQuery. Les éléments à l'intérieur de vous peuvent comparer si vous le souhaitez.

i1[0] == i2[0].

Vous pouvez créer une fonction pour parcourir l'ensemble de l'élément à comparer et vous assurer que les éléments correspondent.

Vous pouvez également faire .is('.test') mais vous devez toujours spécifier le sélecteur.

+0

est-il un moyen intelligent de boucle et de comparer? – David

0

Ce ne sont pas exactement les mêmes. Vous comparez le même élément, mais ils sont néanmoins différents.

L'appel .is() doit également échouer car l'élément i1 ne correspond pas i2. Vous pouvez utiliser .is() pour vérifier le nom de classe, par exemple:

i1.is('.text') === true 

mise à jour

à cause de votre commentaire, http://www.jsfiddle.net/htcxT/

peut-être vous cherchez même pour la méthode jQuery .unique() qui qui supprime les éléments DOM dupliqués d'un tableau: .unique()

+0

Différent comment? Je ne cherche pas à comparer les noms de classe, je veux vérifier si les objets contiennent les mêmes éléments DOM. – David

+0

'i1.is ('. Text')' retourné faux sur la console ... – Reigel

+0

@David: C'est une histoire différente, juste pour comparer les 'éléments DOM 'vous devez les comparer avec' if (i1 [0] === i2 [0]) 'ou' if (i1.get (0) === i2.get (0)) '. Les deux motifs renvoient le sous-noeud DOM de l'objet 'jQuery'. – jAndy

2

i1 et i2 ne sont pas égaux car ils diffèrent objets inter.

On dirait que ce que vous voulez est de savoir si les éléments dans les deux objets jQuery sont les mêmes éléments.

Vous devez parcourir le contenu numérique de ces deux objets et les comparer à la place.

Par exemple, quelque chose comme:

for (var i = i1.length; i--;) { 
    if (!i2[i] || i2[i] !== i1[i]) { 
    // jquery objects don't contain same elements 
    } 
} 
Questions connexes