Почему уравнение в заголовке ложно? Как проверить, указывают ли два селектора jQuery на один и тот же объект DOM?
Почему $( "body" ) == $( "body" ) возвращает false?
Ответ 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()
Проверьте текущий согласованный набор элементов на элемент селектора, элемента или jQuery и верните
true
, если хотя бы один из этих элементов соответствует заданным аргументам...В отличие от других методов фильтрации,
.is()
не создает новый объект jQuery. Вместо этого он позволяет тестировать содержимое объекта jQuery без изменений. Это часто полезно в обратных вызовах, таких как обработчики событий...