Проверьте равенство элементов в анимационной функции - PullRequest
1 голос
/ 07 января 2011

У меня есть приведенный ниже код, и я ожидаю, что при первом проходе функции fadeTo будет напечатано «да», так как эти первые два журнала консоли говорят мне, что это один и тот же элемент. Но он не признает их равными. Что мне здесь не хватает?

var tds = self.element.find("td:nth-child(" + (columnIndex + 1) + ")");
tds.fadeTo(options.columnFadeOutTime, 0, function() {
  window.console.log(tds.first());
  window.console.log($(this));
  if ($(this) == tds.first()) {
    window.console.log("yes");
  }
  else {
    window.console.log("no");
  }
}

Ответы [ 3 ]

3 голосов
/ 07 января 2011

Вы сравниваете 2 jQuery объекты, которые отличаются , а не элементами DOM , на которые они ссылаются, что будет выглядеть так:1008 *

Обратите внимание, что нет никакой причины превращать this в объект jQuery.Кроме того, поскольку вы просто отлаживаете, вы можете просто использовать window.console.log(this == tds[0]);, что даст вам true или false в консоли.

Альтернативный подход, если вы хотите .queue() что-то, что запускается только в первый раз, когда оно завершается (это то, чем вы кажетесь после):

var tds = self.element.find("td:nth-child(" + (columnIndex + 1) + ")");
tds.fadeTo(options.columnFadeOutTime, 0).first().queue(function(n) {
  //do something
  n();
});
1 голос
/ 07 января 2011

Это потому, что вы не можете сравнивать два таких объекта jQuery.На другой вопрос уже был дан ответ: Как бы вы сравнили объекты jQuery?

В вашем случае вам придется выполнить:

if (this == tds.first()[0] { /* ... */ }
1 голос
/ 07 января 2011

Похоже, вы сравниваете объекты jQuery вместо их базовых элементов DOM.Это не будет работать так, как ожидалось, потому что в вашем примере $(this) - это новый созданный объект jQuery, который не будет таким же, как тот, который возвращается first () , даже если они оба содержат одинаковыеЭлемент DOM.

Вы можете использовать метод get () для доступа к базовым элементам DOM и их сравнения:

if (this == tds.first().get(0)) {
    window.console.log("yes");
} else {
    window.console.log("no");
}
...