JQuery, если видимый

 <div id="chatCenterMembers">
   <div class="chatmember">
       <a title="Blah Blah Blah">
          <div class="newchatmessage" style="display: block;"></div>

Как я могу захватить видимый div в инструкции if?

У меня $(this) установлено значение <div class="chatmember"> - вторая строка сверху.

Я работал с ниже, но до сих пор удался.

if($(this+' a div.newchatmessage').filter(":visible")) {

Выше просто выпадает...

Я также пробовал ниже, и он не работает.

if ($(this + 'a div.newchatmessage').is(':visible')) {

Ответы

Ответ 1

.is()

за любую подробную информацию об этом методе, просто прокрутите немного вниз... там куча примеров!

изменить (спасибо за подсказку @Wesley Murch): если это не работает, ваш селектор может быть неправильным... $(this+' a div.newchatmessage') выглядит довольно странно... скорее всего, это будет $('a div.newchatmessage', this) или $('a div.newchatmessage', $(this)) в зависимости от this, являющегося переменной jQuery или не

Ответ 2

Используйте .is(), чтобы проверить, выполняет ли элемент определенное требование, например:

if ($(this).find('a div.newchatmessage').is(':visible'))

Или, если вы хотите, чтобы это было более читаемым:

var element = $(this).find('a div.newchatmessage');

if (element.is(':visible')) {
    // Do your thing
}

Ответ 3

Я столкнулся с подобной ситуацией и хотел заметить, что вы должны быть осторожны с селектором jquery, возвращающим более одного элемента. Я считаю, что проверка .is(': visible') будет оценивать только первый элемент в массиве. Вы можете проверить, видимы ли все элементы, возвращаемые этим селектором, с чем-то вроде этого.

if($('.someElementWithThisClass:visible').length > 0){
    //Do it to it
}