2011-01-07 9 views
1

私は以下のコードを持っていて、fadeTo関数の最初のパスで "yes"が最初の2つのコンソールログで出力されることを期待しています。しかし、それは彼らを同等と認識しません。私はここで何を欠場するのですか?アニメーション関数で要素の等価性をチェックする

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"); 
}); 

注意をここではすべてjQueryオブジェクトに変換します。また、デバッグしているだけなので、コンソールにtrueまたはfalseを与えるwindow.console.log(this == tds[0]);を使用することができます。

別のアプローチは、それが完了したとき(あなたは後にするに見える何である)最初でのみ実行する.queue()ものにしたい場合:

var tds = self.element.find("td:nth-child(" + (columnIndex + 1) + ")"); 
tds.fadeTo(options.columnFadeOutTime, 0).first().queue(function(n) { 
    //do something 
    n(); 
}); 
1

基本的なDOM要素の代わりにjQueryオブジェクトを比較しているようです。あなたの例では$(this)は、両方とも同じDOM要素を含んでいても、first()によって返されたものと同じではない新しい作成されたjQueryオブジェクトであるため、期待通りに動作しません。

あなたはそれらを比較するために、基本となるDOM要素にアクセスするためにget()メソッドを使用することができます。

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

あなたがそのような2つのjQueryのオブジェクトを比較することはできませんので、これがあります。あなたがしなければならないでしょうあなたのケースではHow would you compare jQuery objects?

:すでに別の質問に回答されています

関連する問題