Перевірте, чи однакові два елементи


87

Спочатку я підозрюю, що це спрацює:

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

Але це не так. Як можна перевірити, якщо елементи однакові?

Відповіді:


138

Станом на jquery 1.6 тепер ви можете просто зробити:

$element1.is($element2)

7
Це найкраща відповідь для всіх останніх версій Jquery.
Chris Jaynes

Ще одне, про яке я хотів би, щоб я міг проголосувати за кожен раз, коли в кінцевому підсумку гуглюю одне і те ж питання і знаходжу цю відповідь
freefaller

75

Це має спрацювати:

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

так і це

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

3
чи не повинен ваш другий приклад бути ===, а не ==, щоб правильно відображати ваш перший приклад?
Пруспрус

3
Ця відповідь могла бути правильною у старих версіях jquery, але більшість людей, ймовірно, використовують версію, яка підтримує$.is
Кріс Джейнс


12

Як вже хтось сказав, один і той же елемент HTML, загорнутий у два різні моменти, генерує два різні екземпляри 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

Якщо два елементи однакові, два елементи повинні мати однаковий покажчик. Таким чином,

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

0

Як шовковистий або Санті сказав, унікальний ідентифікатор або клас буде найпростішим способом перевірки. Причина того, що ваші оператори if працюють не так, як ви очікували, полягає в тому, що вони порівнюють 2 об'єкти та перевіряють, чи це однаковий об'єкт у пам'яті.

Оскільки це завжди новий об’єкт, який створюється $ (this), вони ніколи не можуть зрівнятися між собою. Ось чому вам доведеться тестувати властивість об’єкта. Ви могли б уникнути жодного унікального ідентифікатора / класу, якби кожен елемент openActivity був гарантовано мати різний вміст, який ви можете перевірити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.