如何比较两个jQuery对象的身份?

Ron*_*gge 37 javascript jquery

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

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

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

qwe*_*ymk 83

你也可以这样做:

 if(val.is(this))
Run Code Online (Sandbox Code Playgroud)

  • 这里最好的答案.荣誉! (2认同)

nic*_*ckf 49

使用该$()函数将始终创建一个新对象,因此无论如何,您的相等检查将始终失败.

例如:

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

$(div) === $(div);   // false!
Run Code Online (Sandbox Code Playgroud)

相反,您可以尝试只存储实际的DOM元素,因为这些元素只是在jQuery对象中引用.

val = $('#box'+index).get(0);
...
if (this !== val) { }
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!一旦StackOverflow让我,我会接受这个答案.你不仅回答了这个问题本身,你还解释了让我搞砸的概念性缺陷 - "给人一条鱼,教一个人钓鱼" (8认同)
  • 这个家伙教你如何用钓竿钓鱼(跛脚),最底层的答案教你如何用双手钓鱼(BA)! (3认同)