jQueryオブジェクトをどのように比較しますか?


101

したがって、2つのjQueryオブジェクトを比較して、親要素がページの本体であるかどうかを確認する方法を理解しようとしています。

ここに私が持っているものがあります:

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

私はこれが間違っていることを知っていますが、誰かが私が何をしているのか理解している場合、彼らはこれを行う正しい方法に私を向けることができますか?


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')); //または$( 'body')以外の何かを確認しますstackoverflow.com/a/6986013/112100
Omu

回答:


158

生のDOM要素を比較する必要があります。例:

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

または

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

1
これにより、jQueryオブジェクトが単一のDOM要素に一致した場合にのみ、等価性が保証されます。複数の一致があった場合、それぞれを比較するためのある種のループが必要になります。
ジミークアドラ

1
@ジミー、はい、しかしこれはOP要件には十分であり、「...親要素が本体である場合...」を知りたいだけです
CMS

2
次のように短縮できます:if(this.parentNode === document.body);
ehynds


60

何故なの:

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


1
またはif ($(this).parent().is($("body")))
2016

18

ループは必要ありません。単一の最初のノードをテストする必要はありません。それらが同じ長さであり、同じノードを共有していることを確認する以外にほとんど何も必要ありません。これは小さなコードスニペットです。自分で使用するために、これをjqueryプラグインに変換することもできます。

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 {}
});

これは、次のdivが等しいと言っていませんか?<div>abc</div> <div>def</div>
チャーリーシュリーサー、2011年

いいえ、フィルターは等しくないDOM要素を渡しません。
tbranyen、2011年

2

私はこれらの答えに出くわし、どちらが良いのか疑問に思いました。それはすべてあなたのニーズに依存しますが、タイプするのが最も簡単で、読み、実行するのはもちろん最良です。これは、私が決定を下すために作成したperfテストケースです。

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


私にとって最速のRAW要素2を報告します。報告された他のすべてのブラウザーでも同じように見えます。
カイルホッチキス

正確には、最初のものと同じですが、JavaScriptのネイティブ配列解析を使用します。
Salketer 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.