【问题标题】:How do I compare two jQuery objects for identity?如何比较两个 jQuery 对象的身份?
【发布时间】:2011-08-08 17:18:34
【问题描述】:

我正在尝试使用 jQuery 打开/关闭网页上的控制“框”。不幸的是,如果用户碰巧点击了已经打开的框,关闭一个框只是为了重新打开它看起来不太好。 (框是互斥的)。

我使用的代码不起作用,我不知道为什么。我仍然会关闭一个盒子,只是为了重新打开,这不是所需的功能。我为调试目的创建了“val”变量;在调试器中,它显示 'val' 与 $(this) 具有完全相同的值,这应该会阻止它到达 if 语句中的 .slideToggle(),但不会。

function openBox(index)
{
  val = $('#box' + index);
  $('.profilePageContentBox').each(function(){
      if($(this).css('display') != 'none')
      {
        if($(this) != val)
        {
          $(this).slideToggle(200);
        }
      }
    });
  val.slideToggle(200);
}

【问题讨论】:

标签: javascript jquery


【解决方案1】:

你也可以这样做:

 if(val.is(this))

【讨论】:

  • 简单直接。很好的答案
  • 最佳答案在这里。赞!
  • Object.is() 方法判断两个值是否相同,这是正确的答案,也是徒手钓鱼的方法:D
【解决方案2】:

使用$() 函数总是会创建一个新对象,所以无论如何,你的相等性检查总是会失败。

例如:

var div = document.getElementById('myDiv');

$(div) === $(div);   // false!

相反,您可以尝试只存储实际的 DOM 元素,因为这些元素只是 引用 到 jQuery 对象内部。

val = $('#box'+index).get(0);
...
if (this !== val) { }

【讨论】:

  • 谢谢!只要 StackOverflow 允许我,我就会接受这个答案。你不仅回答了问题本身,还解释了让我感到困惑的概念缺陷——“授人以鱼,授人以渔”
  • 这家伙教你用鱼竿钓鱼(跛脚),下面的答案教你如何徒手钓鱼(BA)!
【解决方案3】:

试试这个:

function openBox(index)
{
val=$('#box'+index);
$('.profilePageContentBox').each(function(){
    if($(this).is(":visible"))
    {
        if(!$(this).is("#box"+index))
            $(this).slideToggle(200);
    }
});
val.slideToggle(200);
}

【讨论】:

    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 2013-02-18
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    相关资源
    最近更新 更多