Почему $ ("body") == $ ("body") возвращает false? - PullRequest
34 голосов
/ 30 ноября 2010

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

Ответы [ 3 ]

57 голосов
/ 30 ноября 2010

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

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

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

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

$('body').is('body')
35 голосов
/ 30 ноября 2010

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

С другой стороны, document.body == document.bodyоценил бы true.

11 голосов
/ 30 ноября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...