2つの要素が同じかどうかをテストします


87

私はこれが最初はうまくいくと思うでしょう:

if ($('#element') == $('#element')) alert('hello');

しかし、そうではありません。要素が同じかどうかをどのようにテストしますか?

回答:


138

jquery 1.6以降、次のことが簡単にできるようになりました。

$element1.is($element2)

7
これは、Jqueryの最近のすべてのバージョンに対する最良の答えです。
クリスジェインズ2014

同じ質問をグーグルで検索してこの答えを見つけるたびに賛成したいもう1つの質問
freefaller 2017年

75

これは機能するはずです:

if ($(this)[0] === $(this)[0]) alert('hello');

だからこれは

if (openActivity[0] == $(this)[0]) alert('hello');

3
最初の例を適切に反映するために、2番目の例を==ではなく===にするべきではありませんか?
Prusprus 2013年

3
この答えは古いバージョンのjqueryで正しかったかもしれませんが、ほとんどの人はおそらくサポートするバージョンを使用しています$.is
Chris Jaynes 2014


12

すでに誰かが言ったように、2つの異なる瞬間にラップされた同じHTML要素は2つの異なるjQueryインスタンスを生成するため、それらが等しくなることはありません。

代わりに、ラップされたHTML要素は、同じHTML要素である場合、それらが占めるメモリ位置が同じであるため、そのように比較できます。

var LIs = $('#myUL LI');
var $match = $('#myUL').find('LI:first');

alert(LIs.eq(0) === $match); // false
alert(LIs.get(0) === $match.get(0)) // TRUE! yeah :)

宜しくお願いします!


5

開いたものをマークするためにaddClass()を使用しますが、これは簡単に確認できます。


3

9年後、jQueryなし

2つの要素が同じものである場合、2つの要素は同じポインターを持っている必要があります。したがって、

document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false

0

シルキーまたはサンティが言ったように、一意のIDまたはクラスがテストする最も簡単な方法です。ifステートメントが期待どおりに機能しない理由は、2つのオブジェクトを比較し、それらがメモリ内の同じオブジェクトであるかどうかを確認しているためです。

$(this)によって作成されるのは常に新しいオブジェクトであるため、互いに等しくなることはありません。そのため、オブジェクトのプロパティをテストする必要があります。各openActivity要素がテスト可能な異なるコンテンツを持つことが保証されている場合は、一意のID /クラスなしで逃げることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.