2011-01-07 3 views
1

У меня есть код ниже и ожидаем, что в первом проходе функции 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

Вы сравнения 2 JQuery объекты, которые являются разные, а не DOM элементы они ссылаются, это было бы так:

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

Обратите внимание, что нет никаких причин, чтобы превратить 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

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

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

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

Это потому, что вы не можете сравнить два объекта JQuery, как это. Это уже был дан ответ на другой вопрос: How would you compare jQuery objects?

В вашем случае вы должны сделать:

Смежные вопросы