2011-01-07 81 views
1

我有下面的代碼,並且希望在第一次fadeTo函數「yes」時打印出來,因爲前兩個控制檯日誌告訴我它是相同的元素。但它不承認它們是平等的。我在這裏錯過什麼?在動畫函數中檢查元素是否相等

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]);,這會在控制檯中爲您提供truefalse

的另一種方法,如果你想.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"); 
}