равенство объектов jQuery

140
задан Casebash 5 July 2010 в 02:22
поделиться

3 ответа

Начиная с 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;
};

Source

var a = $('p');
var b = $('p');
if (a.equals(b)) {
    // same set
}
219
ответ дан 23 November 2019 в 22:43
поделиться

Если вы все еще не знаете, вы можете вернуть исходный объект с помощью:

alert($("#deviceTypeRoot")[0] == $("#deviceTypeRoot")[0]); //True
alert($("#deviceTypeRoot")[0] === $("#deviceTypeRoot")[0]);//True

, потому что $ ("# deviceTypeRoot") также возвращает массив объектов который выбрал селектор.

16
ответ дан 23 November 2019 в 22:43
поделиться

Вообще говоря, сравнивать $ (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")

будет более подходящим.

9
ответ дан 23 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: