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

时间:2011-08-08 17:18:35

标签: javascript jquery

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

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

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

3 个答案:

答案 0 :(得分:81)

你也可以这样做:

 if(val.is(this))

答案 1 :(得分:49)

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

例如:

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

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

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

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

答案 2 :(得分:0)

试试这个:

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