检查动画函数中的元素相等性

时间:2011-01-07 10:45:00

标签: javascript jquery equals

我有下面的代码,并且期望在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 个答案:

答案 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]);即可在控制台中为您提供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 :(得分: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] { /* ... */ }