54 Вопрос: Как проверить, скрыт ли элемент в jQuery?

вопрос создан в Sun, Oct 30, 2016 12:00 AM

Можно переключать видимость элемента, используя функции .hide(), .show() или .toggle().

Как бы вы проверили, является ли элемент видимым или скрытым?

    
7282
  1. Стоит отметить (даже после всего этого времени), что $(element).is(":visible") работает для jQuery 1.4.4, но не для jQuery 1.3.2, в разделе Internet   Explorer   8 . Это можно проверить с помощью полезного тестового фрагмента Цветомира Цонева , Просто не забудьте изменить версию jQuery, чтобы тестировать под каждой.
    2011-02-01 03: 57: 34Z
  2. Это связано, хотя и с другим вопросом: stackoverflow.com/questions/17425543/…
    2016-03-22 19: 20: 54Z
  3. Какое у вас определение скрытого?
    2018-05-19 07: 29: 38Z
30 ответов                              30                         

Поскольку вопрос относится к одному элементу, этот код может быть более подходящим:

// Checks css for display:[none|block], ignores visibility:[true|false]
$(element).is(":visible"); 

// The same works with hidden
$(element).is(":hidden"); 

То же, что и предложение Твернта , но применяется к одному элементу; и он соответствует алгоритму, рекомендованному в FAQ по jQuery

    
8935
2018-07-02 15: 50: 46Z
  1. Похоже, что это решение поощряет конфликты visible=false и display:none; в то время как решение Моте явно не учитывает намерения кодеров проверить display:none; (посредством упоминания о скрытии и показе, который контролирует display:none, а не visible=true)
    2010-12-29 18: 30: 57Z
  2. Это правильно, но :visible также проверит, видимы ли родительские элементы, как указал Чиборг.
    2011-01-06 12: 30: 27Z
  3. У вас есть точка зрения - я поясню, что код проверяет только свойство display. Учитывая, что исходный вопрос для show() и hide(), и они задают display, мой ответ правильный. Кстати, он работает с IE7, вот тестовый фрагмент - jsfiddle.net/MWZss ;
    2011-01-14 16: 54: 41Z
  4. Я действительно обнаружил, что слова с обратной логикой лучше:! $('селектор'). is (': hidden'); по какой-то причине. Стоит попробовать.
    2012-01-05 15: 36: 15Z
  5. Вот простое тестирование производительности () с помощью регулярного выражения: jsperf.com/jquery-is-vs-regexp-for-css-visibility . Вывод: если вам не хватает производительности, используйте regexp over is () (поскольку is () сначала ищет все скрытые узлы, а затем просматривает фактический элемент).
    2012-06-22 14: 12: 11Z

Вы можете использовать hidden селектор:

// Matches all elements that are hidden
$('element:hidden')

И visible селектор:

// Matches all elements that are visible
$('element:visible')
    
1382
2018-03-08 15: 38: 27Z
  1. просто будьте осторожны, в этой презентации есть несколько полезных советов, касающихся производительности: addyosmani.com/jqprovenperformance
    2011-07-11 17: 05: 57Z
  2. На страницах с 21 по 28 показано, как по сравнению с другими селекторами slow: hidden или: visible. Спасибо за указание этого.
    2012-07-04 20: 12: 04Z
  3. Когда вы имеете дело с парой элементов, и очень мало что происходит - то есть АБСОЛЮТНО БОЛЬШОЕ БОЛЬШИНСТВО СЛУЧАЙ - проблема времени является смехотворно незначительной проблемой. О нет! Это заняло 42 мс вместо 19 мс !!!
    2013-02-20 14: 56: 49Z
  4. Я поменяю элемент с помощью этого селектора. $('element: hidden') всегда верно для меня!
    2013-08-09 07: 18: 33Z
  5. @ cwingrav Возможно, вы захотите перечитать документацию: скрытый применяется ко всем элементам. Элементы формы с type="hidden" - это только один случай, который может вызвать: скрытый. Элементы без высоты и ширины, элементы с display: none и элементы со скрытыми предками также будут квалифицироваться как: скрытые.
    2016-01-15 04: 15: 16Z
if ( $(element).css('display') == 'none' || $(element).css("visibility") == "hidden"){
    // element is hidden
}

Выше метод не учитывает видимость родителя. Чтобы учесть родителя, вы должны использовать .is(":hidden") или .is(":visible").

Например,

<div id="div1" style="display:none">
  <div id="div2" style="display:block">Div2</div>
</div>
  

Приведенный выше метод будет считать div2 видимым, а :visible - нет. Но вышеупомянутое может быть полезно во многих случаях, особенно когда вам нужно выяснить, есть ли какие-либо ошибки, видимые в скрытом родительском элементе, потому что в таких условиях :visible не будет работать.

    
879
2018-08-02 06: 57: 48Z
  1. Этот параметр проверяет только свойство display одного элемента. Атрибут: visible проверяет также видимость родительских элементов.
    2010-03-03 10: 10: 48Z
  2. Это единственное решение, которое помогло мне при тестировании с IE 8.
    2012-01-13 18: 51: 41Z
  3. Это не решение моей проблемы, но метод помог мне определить исправление для проверки свойства моей проблемы.
    2014-03-14 17: 37: 17Z
  4. @ chiborg Да, но иногда это то, что вы хотите, и мне пришлось нелегко узнать, насколько "умным" был jQuery ...
    2014-03-14 17: 56: 14Z
  5. Это действительно отвечает на вопрос, поскольку речь идет об одном элементе и с использованием функций hide(), show() и toggle(), однако, как уже было сказано большинством, мы должны используйте псевдоклассы :visible и :hidden.
    2015-04-14 09: 18: 30Z

Ни один из этих ответов не относится к тому, что я понимаю, к вопросу, который я искал, «Как мне обращаться с элементами, которые имеют visibility: hidden. Ни :visible, ни :hidden не справятся с этим, так как они оба ищут показ согласно документации. Насколько я мог определить, нет селектора для обработки видимости CSS. Вот как я решил (стандартные селекторы jQuery, может быть более сжатый синтаксис):

$(".item").each(function() {
    if ($(this).css("visibility") == "hidden") {
        // handle non visible state
    } else {
        // handle visible state
    }
});
    
497
2017-06-26 07: 12: 02Z
  1. Этот ответ хорош для буквальной обработки visibility, но вопрос был How you would test if an element has been hidden or shown using jQuery?. Использование jQuery означает: свойство display.
    2013-05-11 22: 37: 45Z
  2. Элементы с visibility: hidden или opacity: 0 считаются видимыми, поскольку они по-прежнему занимают место в макете. См. ответ Педро Райнхо и документация jQuery для селектора :visible.
    2013-10-16 09: 12: 04Z
  3. вам нужно пройти через DOM, чтобы проверить родителей узла, иначе это бесполезно.
    2014-04-22 19: 20: 11Z
  4. это не сработает, если скрыть элемент с помощью .hide ().
    2015-08-06 05: 51: 23Z

От Как определить состояние переключаемого элемента?

Вы можете определить, свернут или нет элемент, используя селекторы :visible и :hidden.

var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');

Если вы просто воздействуете на элемент в зависимости от его видимости, вы можете просто включить :visible или :hidden в выражение выбора. Например:

 $('#myDiv:visible').animate({left: '+=200px'}, 'slow');
    
363
2016-01-12 14: 08: 58Z
  1. интересно, почему ни в одном ответе не упоминается случай, когда элемент удален от видимого окна, например top:-1000px ... Думаю, это случай с краем
    2017-05-08 09: 34: 11Z

Зачастую, проверяя, является ли что-то видимым или нет, вы сразу же собираетесь пойти дальше и сделать что-то еще с этим. jQuery цепочка делает это легко.

Таким образом, если у вас есть селектор и вы хотите выполнить какое-либо действие с ним только в том случае, если он видим или скрыт, вы можете использовать filter(":visible") или filter(":hidden"), а затем связать его с действием, которое вы хотите выполнить.

Таким образом, вместо выражения if, например:

if ($('#btnUpdate').is(":visible"))
{
     $('#btnUpdate').animate({ width: "toggle" });   // Hide button
}

Или более эффективный, но еще более уродливый:

var button = $('#btnUpdate');
if (button.is(":visible"))
{
     button.animate({ width: "toggle" });   // Hide button
}

Вы можете сделать все это в одной строке:

$('#btnUpdate').filter(":visible").animate({ width: "toggle" });
    
270
2015-04-27 20: 10: 05Z
  1. Нет причин извлекать узел DOM из фрагмента, использованного в примере, а затем снова искать его. Лучше просто сделать: var $button = $('# btnUpdate'); А затем в выражениях If просто используйте кнопку $вместо $(кнопка). Имеет преимущество кэширования объекта jQuery.
    2012-04-21 22: 32: 30Z
  2. вот простой пример jquerypot.com/…
    2018-04-29 13: 28: 08Z

Селектор :visible согласно документации jQuery :

  
  • Они имеют значение CSS display none.
  •   
  • Они являются элементами формы с type="hidden".
  •   
  • Их ширина и высота явно установлены на 0.
  •   
  • Элемент-предок скрыт, поэтому элемент не отображается на странице.
  •   

Элементы с visibility: hidden или opacity: 0 считаются видимыми, поскольку они по-прежнему занимают место в макете.

Это полезно в некоторых случаях и бесполезно в других, потому что, если вы хотите проверить, видим ли элемент (display != none), игнорируя родительскую видимость, вы обнаружите, что выполнение .css("display") == 'none' не только быстрее, но и возвращает проверка видимости правильно.

Если вы хотите проверить видимость вместо отображения, вы должны использовать: .css("visibility") == "hidden".

Также примите во внимание дополнительные заметки jQuery :

  

Поскольку :visible является расширением jQuery и не является частью спецификации CSS, запросы, использующие :visible, не могут воспользоваться преимуществами повышения производительности, обеспечиваемыми собственным методом DOM querySelectorAll(). Чтобы добиться максимальной производительности при использовании :visible для выбора элементов, сначала выберите элементы с помощью чистого селектора CSS, а затем используйте .filter(":visible").

Кроме того, если вас беспокоит производительность, вы должны проверить Теперь вы видите меня… показать /скрыть производительность (2010-05-04). И используйте другие методы, чтобы показать и скрыть элементы.

    
223
2017-06-21 01: 41: 47Z

Это работает для меня, и я использую show() и hide(), чтобы сделать мой div скрытым /видимым:

if( $(this).css('display') == 'none' ){
    /* your code goes here */
} else {
    /* alternate logic   */
}
    
199
2015-12-14 21: 32: 03Z

Как элемент видимость и jQuery работает сильный>; р>

Элемент может быть скрыт с помощью display:none, visibility:hidden или opacity:0. Разница между этими методами:

  • display:none скрывает элемент и не занимает места;
  • visibility:hidden скрывает элемент, но все равно занимает место в макете;
  • opacity:0 скрывает элемент как «видимость: скрытый» и все еще занимает место в макете; единственное отличие состоит в том, что непрозрачность позволяет сделать элемент частично прозрачным;

    if ($('.target').is(':hidden')) {
      $('.target').show();
    } else {
      $('.target').hide();
    }
    if ($('.target').is(':visible')) {
      $('.target').hide();
    } else {
      $('.target').show();
    }
    
    if ($('.target-visibility').css('visibility') == 'hidden') {
      $('.target-visibility').css({
        visibility: "visible",
        display: ""
      });
    } else {
      $('.target-visibility').css({
        visibility: "hidden",
        display: ""
      });
    }
    
    if ($('.target-visibility').css('opacity') == "0") {
      $('.target-visibility').css({
        opacity: "1",
        display: ""
      });
    } else {
      $('.target-visibility').css({
        opacity: "0",
        display: ""
      });
    }
    

    Полезные методы переключения jQuery:

    $('.click').click(function() {
      $('.target').toggle();
    });
    
    $('.click').click(function() {
      $('.target').slideToggle();
    });
    
    $('.click').click(function() {
      $('.target').fadeToggle();
    });
    

196
2017-07-30 22: 00: 31Z
  1. Другое различие между visibility:hidden и opacity:0 заключается в том, что элемент по-прежнему будет реагировать на события (например, щелчки) с помощью opacity:0. Я узнал, что этот трюк создает пользовательскую кнопку для загрузки файлов.
    2012-06-29 18: 15: 21Z
  2. также, если вы скрываете ввод с непрозрачностью: 0, он все равно выбирается с помощью клавиши табуляции
    2017-12-12 11: 08: 36Z

Я бы использовал класс CSS .hide { display: none!important; }.

Для скрытия /показа я звоню .addClass("hide")/.removeClass("hide"). Для проверки видимости я использую .hasClass("hide").

Это простой и понятный способ проверить /скрыть /показать элементы, если вы не планируете использовать методы .toggle() или .animate().

    
152
2014-03-19 08: 15: 37Z
  1. .hasClass('hide') не проверяет, является ли предок родителя скрытым (что также сделало бы его скрытым). Вы могли бы заставить это работать правильно, проверив, если .closest('.hide').length > 0, но зачем изобретать велосипед?
    2012-09-25 23: 57: 15Z
  2. Вариант, который вы предлагаете, возвращает, если элемент виден в html, мой вариант возвращает, если элемент был непосредственно скрыт вашим механизмом кода JavaScript /представления. Если вы знаете, что родительские элементы никогда не должны быть скрыты - используйте .hasClass (), чтобы быть более строгими и предотвратить будущие ошибки. Если вы хотите проверить не только видимость, но и состояние элемента, установленного - тоже используйте .hasClass (). В других случаях .closest () лучше.
    2012-12-01 20: 27: 09Z
  3. Почему вы просто не используете .is (": visible")?
    2018-10-16 09: 43: 43Z

Вы также можете сделать это с помощью простого JavaScript:

function isRendered(domObj) {
    if ((domObj.nodeType != 1) || (domObj == document.body)) {
        return true;
    }
    if (domObj.currentStyle && domObj.currentStyle["display"] != "none" && domObj.currentStyle["visibility"] != "hidden") {
        return isRendered(domObj.parentNode);
    } else if (window.getComputedStyle) {
        var cs = document.defaultView.getComputedStyle(domObj, null);
        if (cs.getPropertyValue("display") != "none" && cs.getPropertyValue("visibility") != "hidden") {
            return isRendered(domObj.parentNode);
        }
    }
    return false;
}

Примечания:

  1. Работает везде

  2. Работает для вложенных элементов

  3. Работает для CSS и встроенных стилей

  4. Не требуется каркас

148
2014-03-19 08: 15: 29Z
  1. Работает несколько иначе, чем в jQuery; он считает visibility: hidden видимым .
    2012-09-20 04: 45: 23Z
  2. Достаточно легко изменить приведенный выше код, чтобы имитировать (возможно, глупое) поведение jQuery. , , , , function isRendered (o) {if ((o.nodeType! = 1) || (o == document.body)) {return true;} if (o.currentStyle & o.currentStyle ["display"]! = "none") {return isRendered (o.parentNode);} иначе if (window.getComputedStyle) {if (document.defaultView.getComputedStyle (o, null) .getPropertyValue ("display")! = "none") {return isRendered (o.parentNode);}} return false;}
    2012-09-26 13: 57: 30Z
  3. Конечно, я просто добавил это для пользователей, которые использовали это без сканирования его кода. :)
    2012-09-26 21: 33: 20Z

Можно просто использовать атрибут hidden или visible, например:

$('element:hidden')
$('element:visible')

Или вы можете упростить то же самое с помощью is следующим образом.

$(element).is(":visible")
    
126
2013-03-16 10: 04: 04Z

демонстрационная ссылка

р>

$('#clickme').click(function() {
  $('#book').toggle('slow', function() {
    // Animation complete.
    alert($('#book').is(":visible")); //<--- TRUE if Visible False if Hidden
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="clickme">
  Click here
</div>
<img id="book" src="http://www.chromefusion.com/wp-content/uploads/2012/06/chrome-logo.jpg" alt="" />

Источник:

Blogger Plug n Play - Инструменты и виджеты jQuery: как узнать, скрыт или виден элемент с помощью jQuery

    
122
2018-12-13 12: 15: 11Z
  1. @ Adrew, но по этой ссылке показан рабочий пример этой функции. Я думаю, что практический ответ может весить всю страницу текста:)
    2013-01-25 06: 30: 44Z
  2. @ jolly.exe до тех пор, пока этот рабочий пример не исчезнет.
    2013-10-10 21: 49: 17Z

ebdiv должен быть установлен в style="display:none;". Он работает как для показа, так и для скрытия:

$(document).ready(function(){
    $("#eb").click(function(){
        $("#ebdiv").toggle();
    });    
});
    
118
2018-10-26 07: 33: 26Z

Еще один ответ, который вы должны принять во внимание: если вы скрываете элемент, вы должны использовать jQuery , но вместо того, чтобы скрывать его, вы удаляете весь элемент, но копируете его HTML контент и сам тег в переменную jQuery, а затем все, что вам нужно сделать, это проверить, есть ли такой тег на экране, используя обычный if (!$('#thetagname').length).

    
114
2013-03-26 22: 12: 11Z

При тестировании элемента с помощью селектора :hidden в jQuery следует учитывать, что элемент с абсолютным позиционированием может быть распознан как скрытый, хотя его дочерние элементы являются видимыми .

Во-первых, это кажется несколько интуитивно понятным, хотя более внимательный взгляд на документацию jQuery дает соответствующую информацию:

  

Элементы могут считаться скрытыми по нескольким причинам: [...] их ширина и высота явно установлены на 0. [...]

Так что на самом деле это имеет смысл в отношении блочной модели и вычисляемого стиля для элемента. Даже если ширина и высота не установлены явно в 0, они могут быть установлены неявно .

Посмотрите на следующий пример:

р>

console.log($('.foo').is(':hidden')); // true
console.log($('.bar').is(':hidden')); // false
.foo {
  position: absolute;
  left: 10px;
  top: 10px;
  background: #ff0000;
}

.bar {
  position: absolute;
  left: 10px;
  top: 10px;
  width: 20px;
  height: 20px;
  background: #0000ff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">
  <div class="bar"></div>
</div>

ОБНОВЛЕНИЕ ДЛЯ JQUERY 3.x:

В jQuery 3 описанное поведение изменится! Элементы будут считаться видимыми, если у них есть какие-либо поля макета, в том числе с нулевой шириной и /или высотой.

JSFiddle с jQuery 3.0.0-alpha1:

http://jsfiddle.net/pM2q3/7/

Тогда тот же JS будет иметь такой вывод:

console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false
    
89
2016-08-06 08: 53: 27Z

Это может сработать:

expect($("#message_div").css("display")).toBe("none");
    
84
2013-03-06 06: 41: 05Z
  1. Какой это язык /диалект /библиотека? Я не знаком с этим синтаксисом в JS ...
    2012-09-25 23: 31: 33Z
  2. Это похоже на жасмин .
    2017-03-23 ​​00: 48: 31Z

Пример:

р>

$(document).ready(function() {
  if ($("#checkme:hidden").length) {
    console.log('Hidden');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="checkme" class="product" style="display:none">
  <span class="itemlist"><!-- Shows Results for Fish --></span> Category:Fish
  <br>Product: Salmon Atlantic
  <br>Specie: Salmo salar
  <br>Form: Steaks
</div>
    
67
2017-07-16 13: 52: 00Z

Чтобы проверить, не виден ли он, я использую !:

if ( !$('#book').is(':visible')) {
    alert('#book is not visible')
}

Или следующее - тоже sam, сохраняющий селектор jQuery в переменной для повышения производительности, когда он вам нужен несколько раз:

var $book = $('#book')

if(!$book.is(':visible')) {
    alert('#book is not visible')
}
    
63
2013-09-14 08: 01: 52Z
  1. Как вы определили, что сохранение селектора в переменной действительно быстрее?
    2013-06-20 21: 32: 30Z
  2. Привет, @Ilia Ростовцев jsperf.com/caching -jquery-selectors Там вы можете запустить тест. В любом случае, хорошо, что он кэширован, чтобы к нему можно было получить доступ быстрее
    2013-06-21 06: 56: 50Z
  3. Это удобно, если вы хотите использовать одну переменную в процессе вместо вызова и вызова одного и того же объекта.
    2013-08-25 16: 57: 09Z

Используйте переключение классов, а не редактирование стилей. , .

Использовать классы, предназначенные для "сокрытия" элементов, легко, а также одним из наиболее эффективных методов. Переключение класса «скрытый» со стилем Display «нет» будет выполняться быстрее, чем непосредственное редактирование этого стиля. Я довольно подробно объяснил это в вопросе переполнения стека Превращение двух элементов, видимых /скрытых в одном и том же элементе .

Рекомендации и оптимизация JavaScript

Вот действительно поучительное видео о Google Tech Talk, разработанном инженером Google Николасом Закасом:

60
2017-05-23 12: 10: 45Z

Пример использования видимой проверки для блокировщика рекламы активирован:

р>

$(document).ready(function(){
  if(!$("#ablockercheck").is(":visible"))
    $("#ablockermsg").text("Please disable adblocker.").show();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="ad-placement" id="ablockercheck"></div>
<div id="ablockermsg" style="display: none"></div>

"ablockercheck" - это идентификатор, который блокирует adblocker. Поэтому, проверив, виден ли он, вы сможете определить, включен ли блокировщик рекламы.

    
58
2016-09-13 14: 07: 43Z

В конце концов, ни один из примеров меня не устраивает, поэтому я написал свой собственный.

Тесты (без поддержки Internet Explorer filter:alpha):

а) Проверьте, не скрыт ли документ

b) Проверьте, имеет ли элемент нулевую ширину /высоту /непрозрачность или display:none/visibility:hidden во встроенных стилях

c) Проверьте, не скрыт ли центр (также потому, что он быстрее, чем тестирование каждого пикселя /угла) элемента другим элементом (и всеми его предками, например: overflow:hidden /scroll /one element over enother) или краями экрана

d) Проверьте, имеет ли элемент нулевую ширину /высоту /непрозрачность или display:none /видимость: скрыто в вычисляемых стилях (среди всех предков)

Проверено на

Android 4.4 (собственный браузер /Chrome /Firefox), Firefox (Windows /Mac), Chrome (Windows /Mac), Opera (Windows Presto /Mac Webkit), Internet Explorer (режимы документов Internet Explorer 5-11 + Internet Explorer 8 на виртуальной машине), Safari (Windows /Mac /iOS)

var is_visible = (function () {
    var x = window.pageXOffset ? window.pageXOffset + window.innerWidth - 1 : 0,
        y = window.pageYOffset ? window.pageYOffset + window.innerHeight - 1 : 0,
        relative = !!((!x && !y) || !document.elementFromPoint(x, y));
        function inside(child, parent) {
            while(child){
                if (child === parent) return true;
                child = child.parentNode;
            }
        return false;
    };
    return function (elem) {
        if (
            document.hidden ||
            elem.offsetWidth==0 ||
            elem.offsetHeight==0 ||
            elem.style.visibility=='hidden' ||
            elem.style.display=='none' ||
            elem.style.opacity===0
        ) return false;
        var rect = elem.getBoundingClientRect();
        if (relative) {
            if (!inside(document.elementFromPoint(rect.left + elem.offsetWidth/2, rect.top + elem.offsetHeight/2),elem)) return false;
        } else if (
            !inside(document.elementFromPoint(rect.left + elem.offsetWidth/2 + window.pageXOffset, rect.top + elem.offsetHeight/2 + window.pageYOffset), elem) ||
            (
                rect.top + elem.offsetHeight/2 < 0 ||
                rect.left + elem.offsetWidth/2 < 0 ||
                rect.bottom - elem.offsetHeight/2 > (window.innerHeight || document.documentElement.clientHeight) ||
                rect.right - elem.offsetWidth/2 > (window.innerWidth || document.documentElement.clientWidth)
            )
        ) return false;
        if (window.getComputedStyle || elem.currentStyle) {
            var el = elem,
                comp = null;
            while (el) {
                if (el === document) {break;} else if(!el.parentNode) return false;
                comp = window.getComputedStyle ? window.getComputedStyle(el, null) : el.currentStyle;
                if (comp && (comp.visibility=='hidden' || comp.display == 'none' || (typeof comp.opacity !=='undefined' && comp.opacity != 1))) return false;
                el = el.parentNode;
            }
        }
        return true;
    }
})();

Как использовать:

is_visible(elem) // boolean
    
57
2014-04-28 18: 10: 50Z

Вам нужно проверить оба ... Отображение, а также видимость:

if ($(this).css("display") == "none" || $(this).css("visibility") == "hidden") {
    // The element is not visible
} else {
    // The element is visible
}

Если мы проверяем $(this).is(":visible"), jQuery автоматически проверяет обе вещи.

    
51
2014-07-19 15: 23: 42Z

Может быть, вы можете сделать что-то вроде этого

р>

$(document).ready(function() {
   var visible = $('#tElement').is(':visible');

   if(visible) {
      alert("visible");
                    // Code
   }
   else
   {
      alert("hidden");
   }
});
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

<input type="text" id="tElement" style="display:block;">Firstname</input>
    
39
2016-05-02 12: 59: 24Z

Просто проверьте видимость, проверив логическое значение, например:

if (this.hidden === false) {
    // Your code
}

Я использовал этот код для каждой функции. В противном случае вы можете использовать is(':visible') для проверки видимости элемента.

    
34
2017-07-16 13: 56: 39Z

Потому что Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout (как описано для jQuery: visible Selector ) - мы можем проверить, действительно ли элемент видно таким образом:

function isElementReallyHidden (el) {
    return $(el).is(":hidden") || $(el).css("visibility") == "hidden" || $(el).css('opacity') == 0;
}

var booElementReallyShowed = !isElementReallyHidden(someEl);
$(someEl).parents().each(function () {
    if (isElementReallyHidden(this)) {
        booElementReallyShowed = false;
    }
});
    
33
2014-03-20 10: 32: 25Z

Но что, если CSS элемента похож на следующий?

.element{
    position: absolute;left:-9999;    
}

Итак, ответ на вопрос о переполнении стека Как проверить, находится ли элемент вне экрана также следует учитывать.

    
31
2017-05-23 11: 55: 02Z

Также вот троичное условное выражение, чтобы проверить состояние элемента и затем переключить его:

$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });
    
30
2013-11-05 23: 32: 02Z
  1. Или, да, просто избавьтесь от всего условного выражения и скажите $('elementToToggle').toggle('slow'); ... :)
    2013-12-25 08: 53: 21Z
if($('#postcode_div').is(':visible')) {
    if($('#postcode_text').val()=='') {
        $('#spanPost').text('\u00a0');
    } else {
        $('#spanPost').text($('#postcode_text').val());
}
    
30
2013-12-07 13: 51: 23Z

Можно создать функцию для проверки атрибутов видимости /отображения, чтобы определить, отображается ли элемент в пользовательском интерфейсе или нет.

function checkUIElementVisible(element) {
    return ((element.css('display') !== 'none') && (element.css('visibility') !== 'hidden'));
}

Рабочая скрипка

    
30
2014-11-22 11: 23: 57Z
источник размещен Вот
Другие вопросы