Начиная с jQuery 1.6, вы можете использовать .is
. Ниже приведен ответ, полученный более года назад ...
var a = $('#foo');
var b = a;
if (a.is(b)) {
// the same object!
}
Если вы хотите увидеть, являются ли две переменные на самом деле одним и тем же объектом, например:
var a = $('#foo');
var b = a;
... тогда вы можете проверить их уникальные идентификаторы. Каждый раз, когда вы создаете новый объект jQuery, он получает идентификатор.
if ($.data(a) == $.data(b)) {
// the same object!
}
Хотя то же самое может быть достигнуто с помощью простого a === b
, приведенное выше может, по крайней мере, показать следующему разработчику именно то, что вы тестируете.
В любом случае, вероятно, это не то, что вам нужно. Если вы хотите проверить, содержат ли два разных объекта jQuery один и тот же набор элементов, вы можете использовать это:
$.fn.equals = function(compareTo) {
if (!compareTo || this.length != compareTo.length) {
return false;
}
for (var i = 0; i < this.length; ++i) {
if (this[i] !== compareTo[i]) {
return false;
}
}
return true;
};
var a = $('p');
var b = $('p');
if (a.equals(b)) {
// same set
}
Если вы все еще не знаете, вы можете вернуть исходный объект с помощью:
alert($("#deviceTypeRoot")[0] == $("#deviceTypeRoot")[0]); //True
alert($("#deviceTypeRoot")[0] === $("#deviceTypeRoot")[0]);//True
, потому что $ ("# deviceTypeRoot")
также возвращает массив объектов который выбрал селектор.
Вообще говоря, сравнивать $ (foo) с $ (foo) - плохая идея, поскольку это функционально эквивалентно следующему сравнению:
<html>
<head>
<script language='javascript'>
function foo(bar) {
return ({ "object": bar });
}
$ = foo;
if ( $("a") == $("a") ) {
alert ("JS engine screw-up");
}
else {
alert ("Expected result");
}
</script>
</head>
</html>
Конечно, вы никогда не ожидаете, что " Ошибка двигателя JS ". Я использую «$», чтобы прояснить, что делает jQuery.
Каждый раз, когда вы вызываете $ ("# foo"), вы фактически выполняете jQuery ("# foo"), который возвращает новый объект . Поэтому их сравнение и ожидание одного и того же объекта неверно.
Однако то, что вы МОЖЕТЕ сделать, может быть примерно таким:
<html>
<head>
<script language='javascript'>
function foo(bar) {
return ({ "object": bar });
}
$ = foo;
if ( $("a").object == $("a").object ) {
alert ("Yep! Now it works");
}
else {
alert ("This should not happen");
}
</script>
</head>
</html>
Так что на самом деле вам, возможно, стоит сравнить элементы идентификатора объектов jQuery в вашей реальной программе, поэтому что-то вроде
...
$(someIdSelector).attr("id") == $(someOtherIdSelector).attr("id")
будет более подходящим.