Comment compareriez-vous les objets jQuery?


101

J'essaie donc de comprendre comment comparer deux objets jQuery, pour voir si l'élément parent est le corps d'une page.

voici ce que j'ai:

if ( $(this).parent() === $('body') ) ...

Je sais que c'est faux, mais si quelqu'un comprend ce à quoi je veux en venir, pourrait-il m'indiquer la bonne façon de procéder?


2
var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object
Victor

1
$ (this) .parent (). is ($ ('body')); // ou vérifiez autre chose que $ ('body') stackoverflow.com/a/6986013/112100
Omu

Réponses:


158

Vous devez comparer les éléments DOM bruts, par exemple:

if ($(this).parent().get(0) === $('body').get(0))

ou

if ($(this).parent()[0] === $('body')[0])

1
Cela ne garantira l'égalité que si l'objet jQuery correspond à un seul élément DOM. S'il y avait plusieurs correspondances, vous auriez besoin d'une boucle pour les comparer.
Jimmy Cuadra

1
@Jimmy, oui mais cela suffit pour les exigences de l'OP, il veut seulement savoir "... si l'élément parent est le corps ..."
CMS

2
Peut être raccourci en: if (this.parentNode === document.body);
ehynds


60

Pourquoi pas:

if ($(this).parent().is("body")) {
  ...
}

?


1
Ouif ($(this).parent().is($("body")))
fin du

18

Le bouclage n'est pas nécessaire, le test du premier nœud n'est pas nécessaire. Il n'y a pratiquement rien d'autre à faire que de s'assurer qu'ils ont la même longueur et partagent des nœuds identiques. Voici un petit extrait de code. Vous voudrez peut-être même le convertir en un plugin jquery pour vos propres utilisations.

jQuery(function($) {
  // Two separate jQuery references
  var divs = $("div");
  var divs2 = $("div");

  // They are equal
  if (divs.length == divs2.length && divs.length == divs.filter(divs2).length) {         

  // They are not
  } else {}
});

Cela ne veut-il pas dire que les divs suivants sont égaux? <div>abc</div> <div>def</div>
Charlie Schliesser

Non, le filtre ne transmettra pas les éléments DOM qui ne sont pas égaux.
tbranyen

2

Je suis tombé sur ces réponses et je me suis demandé laquelle était la meilleure. Tout dépend de vos besoins, mais le plus simple à taper, lire et exécuter est bien sûr le meilleur. Voici le test de performance que j'ai fait pour prendre une décision.

http://jsperf.com/jquery-objects-comparison


Le rapport brut des éléments DOM 2 est le plus rapide pour moi: il ressemble également à tous les autres navigateurs signalés.
Kyle Hotchkiss

Exactement, c'est le même que le premier mais utilise l'analyse native des tableaux de javascript.
Salketer
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.