Подтвердить что ты не робот

Почему $( "body" ) == $( "body" ) возвращает false?

Почему уравнение в заголовке ложно? Как проверить, указывают ли два селектора jQuery на один и тот же объект DOM?

4b9b3361

Ответ 1

Вы сравниваете два разных объекта jQuery, потому что вы вызываете $() дважды (один раз для каждой стороны уравнения) и как объясняет MooGoo jQuery создает новые объекты-обертки за каждый раз, когда вы его вызываете. Поэтому сравнение заканчивается возвратом false.

Вы можете извлечь объект DOM из каждого объекта jQuery либо с помощью get(), либо разыменования массива, а затем сравнить эти элементы. Следующие оба возвращают true, потому что оба идентичных селектора соответствуют одному и тому же элементу body DOM:

$('body').get(0) == $('body').get(0)
$('body')[0] == $('body')[0]

Если вы хотите протестировать селектор jQuery, используйте is(). Обратите внимание, что если ваши селекторы не идентичны, используемые вами селекторы могут не совпадать с одинаковыми элементами DOM (лучше использовать выше). Это также возвращает true:

$('body').is('body')

Ответ 2

Поскольку jQuery создает новый объект-оболочку для каждого вызова $, а в Javascript все объекты различны, даже если они имеют одинаковые свойства/методы.

С другой стороны, document.body == document.body будет оценивать значение true.

Ответ 3

Используйте $.is()

http://api.jquery.com/is/

Проверьте текущий согласованный набор элементов на элемент селектора, элемента или jQuery и верните true, если хотя бы один из этих элементов соответствует заданным аргументам...

В отличие от других методов фильтрации, .is() не создает новый объект jQuery. Вместо этого он позволяет тестировать содержимое объекта jQuery без изменений. Это часто полезно в обратных вызовах, таких как обработчики событий...