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