Как сравнить два объекта 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);
}

Ответ 1

Использование функции $() всегда создаст новый объект, поэтому независимо от того, ваша проверка равенства всегда будет терпеть неудачу.

Например:

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

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

Вместо этого вы можете попробовать просто сохранить фактические элементы DOM, так как они просто упоминаются внутри объектов jQuery.

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

Ответ 2

Вы также можете сделать:

 if(val.is(this))

Ответ 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);
}