我有下面的代码,并且期望在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");
}
}
答案 0 :(得分:3)
您正在比较2个 jQuery 对象,其中 不同,而不是它们引用的 DOM元素,就像这样:< / p>
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 :(得分:1)
看起来你正在比较jQuery对象而不是它们的底层DOM元素。这将无法按预期工作,因为在您的示例中$(this)
是一个新创建的jQuery对象,它与first()返回的对象不同,即使它们都包含相同的DOM元素
您可以使用get()方法访问底层DOM元素以进行比较:
if (this == tds.first().get(0)) {
window.console.log("yes");
} else {
window.console.log("no");
}
答案 2 :(得分:1)
这是因为你不能比较那样的两个jQuery对象。它已在另一个问题中得到回答:How would you compare jQuery objects?
在你的情况下你必须这样做:
if (this == tds.first()[0] { /* ... */ }