Bir öğenin jQuery'de gizli olup olmadığını nasıl kontrol edebilirim?


7740

O, bir elementin görünürlüğünü değiştirmek işlevlerini kullanarak mümkün mü .hide(), .show()yoksa .toggle()?

Bir eleman olup olmadığını nasıl test olacağını visibleya hidden?


49
Internet & nbsp; Explorer & nbsp; 8$(element).is(":visible") altında jQuery 1.4.4 için çalışan, ancak jQuery 1.3.2 için çalışmayan (bunca zamandan sonra bile) bahsetmeye değer . Bu, Tsvetomir Tsonev'in yararlı test snippet'i kullanılarak test edilebilir . Her birinin altında test etmek için jQuery sürümünü değiştirmeyi unutmayın.
Reuben

2
Bu, farklı bir soruya rağmen ilişkilidir: stackoverflow.com/questions/17425543/…
Mark Schultheiss

Yanıtlar:


9396

Soru tek bir öğeye atıfta bulunduğundan, bu kod daha uygun olabilir:

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

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

Twistin önerisi ile aynıdır , ancak tek bir elemana uygulanır; ve jQuery SSS bölümünde önerilen algoritma ile eşleşir .

Seçilen öğeyi başka bir öğe, seçici veya herhangi bir jQuery nesnesiyle kontrol etmek için jQuery's (() öğesini kullanırız. Bu yöntem, iletilen parametreyi karşılayan bir eşleşme bulmak için DOM öğeleri boyunca dolaşır. Bir eşleşme varsa true, aksi halde false döndürür.


164
Bu çözüm visible=falseve display:none; Mote'un çözümü kodlayıcıları kontrol etme niyetini açıkça ortaya koyarken display:none; (saklamayın ve hangi kontrolün display:noneolmadığını gösterin visible=true)
kralco626

93
Bu doğrudur, ancak :visiblechiborg'un işaret ettiği gibi ana öğelerin görünür olup olmadığını da kontrol edecektir.
Tsvetomir Tsonev

45
Bir noktanız var - Kodun yalnızca displayözelliği kontrol ettiğini açıkça belirtecağım . Orijinal soru için show()ve hide()ve onlar set için display, benim cevap doğru. Bu arada IE7 ile çalışıyor, burada bir test snippet'i var - jsfiddle.net/MWZss ;
Tsvetomir Tsonev

53
Aslında ters mantık kelimeleri daha iyi buldum:! $ ('Selector'). İs (': hidden'); bazı sebeplerden dolayı. Denemeye değer.
Kzqai

21
İşte regexp'ye karşı basit bir kıyaslama testi (): jsperf.com/jquery-is-vs-regexp-for-css-visibility . Sonuç: performans için dışarı çıkıyorsanız, regexp over is () işlevini kullanın (çünkü () gerçek öğeye bakmadan önce tüm gizli düğümleri arar).
Max Leske

1457

hiddenSeçiciyi kullanabilirsiniz :

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

Ve visibleseçici:

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

67
sadece dikkatli olun, bu sunumda performansla ilgili bazı ipuçları bulunmaktadır: addyosmani.com/jqprovenperformance
codecraig

27
21-28. Sayfalarda diğer seçicilerle ne kadar yavaş: gizli veya: görünür olduğunu gösterir. Bunu işaret ettiğiniz için teşekkürler.
Etienne Dupuis

109
Birkaç unsurla uğraşırken ve çok az şey oluyorsa - örn. KESİNLİKLE HIZLI VAKA BÜYÜKLÜĞÜ - zaman sorunu gülünç derecede küçük bir sorundur. Ah, hayır! 19 ms yerine 42 ms sürdü !!!
vbullinger

16
Bu seçiciyi kullanarak öğeyi nihayetinde değiştiriyorum. $ ('element: hidden') benim için her zaman doğrudur!
ZoomIn

15
@cwingrav Belgeleri yeniden okumak isteyebilirsiniz,: hidden tüm öğeler için geçerlidir. Form öğeleri type="hidden", tetikleyebilen yalnızca bir durumdur: gizli. Yüksekliği ve genişliği olmayan elemanlar display: none, ataları olan elemanlar ve gizli ataları olan elemanlar da şu şekilde nitelendirilir:
Joshua Walsh

948
if ( $(element).css('display') == 'none' || $(element).css("visibility") == "hidden"){
    // 'element' is hidden
}

Yukarıdaki yöntem, ebeveynin görünürlüğünü dikkate almaz. Ebeveyni de dikkate almak için .is(":hidden")veya seçeneğini kullanmalısınız .is(":visible").

Örneğin,

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

Yukarıdaki yöntem div2görünür :visibleolmasa da görünür olarak değerlendirilecektir . Ancak, yukarıdaki gibi birçok durumda yararlı olabilir, özellikle gizli ebeveynte görünür herhangi bir hata div olup olmadığını bulmanız gerektiğinde, bu gibi durumlarda :visibleçalışmaz.


131
Bu yalnızca tek bir öğenin display özelliğini kontrol eder. : Visible niteliği, üst öğelerin görünürlüğünü de denetler.
chiborg

16
IE 8 ile test yaparken benim için çalışan tek çözüm budur.
evanmcd

20
@chiborg Evet, ama bazen istediğin şey bu ve "zeki" jQuery'nin ne kadar zor olduğunu öğrenmek zorunda kaldım ...
Casey

9
Bu soruya cevap verir, soru tek bir öğe ile ilgilidir ve hide(), show()ve toggle()işlevlerini kullanarak , ancak daha önce de belirtildiği gibi, :visibleve :hiddensözde sınıfları kullanmalıyız.
Jimmy Knoot

2
Bu yanıt, bir öğe bulunduğunda ancak şu anda sayfada bulunmadığında (detach () gibi) kullanılabilir.
atheaos

526

Bu cevapların hiçbiri, soru olarak anladığım şeyi, yani aradığım şey olan "Sahip olan öğeleri nasıl ele alırım visibility: hidden?" . Her ikisi :visiblede :hiddenbelgelere göre ekran aradığı için bunu da ele almayacaktır. Belirleyebildiğim kadarıyla, CSS görünürlüğünü idare edecek bir seçici yok. İşte nasıl çözdüm (standart jQuery seçiciler, daha yoğun bir sözdizimi olabilir):

$(".item").each(function() {
    if ($(this).css("visibility") == "hidden") {
        // handle non visible state
    } else {
        // handle visible state
    }
});

18
Bu cevabı visibilitytam anlamıyla ele almak iyi , ama soru buydu How you would test if an element has been hidden or shown using jQuery?. JQuery kullanmak şu anlama gelir: displayözellik.
MarioDS

10
Düzeni olan visibility: hiddenveya opacity: 0tüketen öğeler olduğu kabul edilir, çünkü düzende yer kaplarlar. Bkz tarafından cevap Pedro Rainho ve jQuery belgelerine üzerinde :visibleselektör.
korku

9
düğümün ebeveynlerini kontrol etmek için DOM'u geçmeniz gerekir, yoksa bu işe yaramaz.
vsync

389

Gönderen nasıl toggled elemanın durumunu belirliyorsunuz?


:visibleVe :hiddenseçicilerini kullanarak bir öğenin daraltılıp dağıtılmadığını belirleyebilirsiniz.

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

Görünürlüğüne göre bir öğeye göre hareket ediyorsanız, yalnızca seçici ifadeye :visibleveya :hiddenseçici ifadesine dahil edebilirsiniz . Örneğin:

 $('#myDiv:visible').animate({left: '+=200px'}, 'slow');

4
Öğe görünür pencereden uzağa taşındığında neden yanıtın neden bahsetmediğini merak ediyorum, top:-1000pxsanırım ... Bu bir son durum
jazzcat

294

Genellikle bir şeyin görünür olup olmadığını kontrol ederken, hemen ileri gidecek ve onunla başka bir şey yapacaksınız. jQuery zincirleme bunu kolaylaştırır.

Dolayısıyla, bir seçiciniz varsa ve üzerinde yalnızca görünür veya gizli olduğunda bir işlem yapmak istiyorsanız, bunu yapmak istediğiniz eylemle zincirleyerek kullanabilir filter(":visible")veya filter(":hidden")takip edebilirsiniz .

Yani bir ififade yerine, şöyle:

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

Veya daha verimli, ancak daha çirkin:

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

Hepsini tek bir satırda yapabilirsiniz:

$('#btnUpdate').filter(":visible").animate({ width: "toggle" });

25
Örnekte kullanılan snippet'te DOM düğümünü çıkarmak için bir neden yok ve daha sonra tekrar aramak zorundasınız. Yapması daha iyi: var $ button = $ ('# btnUpdate'); Ve sonra If ifadelerinde $ (düğme) yerine sadece $ düğmesini kullanın. JQuery nesnesini önbelleğe alma avantajına sahiptir.
LocalPCGuy

1
İşte basit bir örnek jquerypot.com/…
Ketan Savaliya

242

:visibleUygun seçici jQuery belgeler :

  • CSS displaydeğeri vardır none.
  • Bunlar form elementleridir type="hidden".
  • Genişlikleri ve yükseklikleri açıkça 0'a ayarlanmıştır.
  • Bir üst öğe gizlendiğinden öğe sayfada gösterilmiyor.

Düzeni olan visibility: hiddenveya opacity: 0tüketen öğeler olduğu kabul edilir, çünkü düzende yer kaplarlar.

Bu, bazı durumlarda yararlı ve diğerlerinde işe yaramaz, çünkü öğenin görünür olup olmadığını kontrol etmek istiyorsanız ( display != none), ebeveynlerin görünürlüğünü göz ardı ederek, yapmanın .css("display") == 'none'sadece daha hızlı olmadığını, aynı zamanda görünürlük kontrolünü doğru bir şekilde döndüreceğini göreceksiniz.

Yerine ekranın görünürlüğünü kontrol etmek isterseniz, kullanmak gerekir: .css("visibility") == "hidden".

Ek jQuery notlarını da dikkate alın :

Çünkü :visiblebir jQuery eklentisi olup CSS şartname parçasıdır kullanarak sorguları :visibleyerli DOM tarafından sağlanan performans artışı yararlanmak edemez querySelectorAll()yöntemle. :visibleEleman seçerken kullanırken en iyi performansı elde etmek için , önce saf CSS seçiciyi kullanarak elemanları seçin, ardından kullanın .filter(":visible").

Ayrıca, performans konusunda endişeleriniz varsa, Şimdi beni görüyorsunuz… performansı göster / gizle (2010-05-04) seçeneğini işaretlemelisiniz. Ve öğeleri göstermek ve gizlemek için diğer yöntemleri kullanın.


214

Bu benim için çalışıyor ve ben div kullanarak / görünür yapmak için show()ve kullanıyorum hide():

if( $(this).css('display') == 'none' ){
    /* your code goes here */
} else {
    /* alternate logic   */
}

213

Eleman görünürlüğü ve jQuery nasıl çalışır ;

Bir element ile gizlenmiş olabilir display:none, visibility:hiddenya da opacity:0. Bu yöntemler arasındaki fark:

  • display:none öğeyi gizler ve yer kaplamaz;
  • visibility:hidden öğeyi gizler, ancak düzende hala yer kaplar;
  • opacity:0öğeyi "görünürlük: gizli" olarak gizler ve düzende hala yer kaplar; tek fark, opaklığın kişinin bir elemanı kısmen saydam yapmasına izin vermesidir;

    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: ""
      });
    }

    Yararlı jQuery geçiş yöntemleri:

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

20
Arasındaki bir diğer fark visibility:hiddenve opacity:0eleman hala ile (tıklamalar gibi) olaylara yanıt olacaktır opacity:0. Dosya yüklemeleri için özel bir düğme oluşturmanın bu numarayı öğrendim.
urraka

1
ayrıca opaklıkla girdiyi gizlerseniz: 0, hala sekme tuşu ile seçilir
YangombiUmpakati

161

Bunu düz JavaScript kullanarak da yapabilirsiniz:

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;
}

Notlar:

  1. Her yerde çalışır

  2. İç içe elemanlar için çalışır

  3. CSS ve satır içi stiller için çalışır

  4. Çerçeve gerektirmez


6
JQuery'den biraz farklı çalışır; Bu dikkate visibility: hiddenolduğu görülebilir .
alex

4
Yukarıdaki kodu, (muhtemelen aptalca) jQuery davranışını taklit etmek için değiştirmek kolaydır. . . . . işlevi isRendered (o) {if ((o.nodeType! = 1) || (o == document.body)) {return true;} if (o.currentStyle && o.currentStyle ["display"]! = "hiçbiri") {return isRendered (o.parentNode);} if (window.getComputedStyle) {if (document.defaultView.getComputedStyle (o, null) .getPropertyValue ("display")! = "none") {dönüş isRendered (o.parentNode );}} dönüş yanlış;}
Matt Brock

3
Elbette, bunu kodunu taramadan kullanan kullanıcıların yararına ekliyordum. :)
alex

160

CSS sınıfını kullanırdım .hide { display: none!important; }.

Saklanmak / göstermek için ararım .addClass("hide")/.removeClass("hide"). Görünürlüğü kontrol etmek için kullanıyorum .hasClass("hide").

Kullanmayı .toggle()veya .animate()yöntemi kullanmayı planlamıyorsanız, öğeleri kontrol etmenin / gizlemenin / göstermenin basit ve açık bir yoludur .


11
.hasClass('hide')ebeveynin bir atasının gizli olup olmadığını kontrol etmez (bu da onu gizler). Muhtemelen bunu kontrol ederek doğru çalışmasını sağlayabilirsiniz .closest('.hide').length > 0, ama neden tekerleği yeniden icat ettiniz ?
nbrooks

1
Önerdiğiniz varyant, html'de görünen öğe döndürürse, öğem doğrudan javascript kodunuz / görünüm motorunuz tarafından gizlenmişse döndürür. Üst öğelerin asla gizlenmemesi gerektiğini biliyorsanız - .hasClass () yöntemini kullanarak daha katı olun ve gelecekteki hataları önleyin. Yalnızca görünürlüğü değil, öğe durumunu da ayarlamak istiyorsanız - .hasClass () öğesini de kullanın. Diğer durumlarda .closest () daha iyidir.
Evgeny Levin

1
Neden sadece .is (": visible") kullanmıyorsunuz?
dont_trust_me

138

Demo Bağlantısı

$('#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="https://upload.wikimedia.org/wikipedia/commons/8/87/Google_Chrome_icon_%282011%29.png" alt="" width="300"/>

Kaynak:

Blogger Tak ve Kullan - jQuery Araçlar ve Widget'lar: jQuery Kullanılarak Öğe'nin gizli veya Görünür Olup Olmadığı Nasıl Görünür?


1
@Adrew ama bu bağlantı bu işlevin çalışan bir örneğini gösteriyor. Ben pratik bir cevap metnin tam bir sayfa üzerinde ağırlık olabilir :)
Code Spy

133

Kişi, hiddenveya visibleözniteliğini aşağıdaki gibi kullanabilir:

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

Yoksa aynı kolaylaştırabilirsiniz DİR şöyle.

$(element).is(":visible")

130

ebdivolarak ayarlanmalıdır style="display:none;". Hem göster hem de gizle için çalışır:

$(document).ready(function(){
    $("#eb").click(function(){
        $("#ebdiv").toggle();
    });    
});

118

Dikkate almanız gereken başka bir yanıt, bir öğeyi gizliyorsanız, jQuery kullanmanız gerekir , ancak aslında gizlemek yerine, tüm öğeyi kaldırırsınız, ancak HTML içeriğini ve etiketinin kendisini bir jQuery değişkenine kopyalarsınız ve sonra Yapmanız gereken tek şey normal olanı kullanarak ekranda böyle bir etiket olup olmadığını test etmektir if (!$('#thetagname').length).


100

Bir öğeyi jQuery'de :hiddenseçiciye karşı test ederken , mutlak konumlandırılmış bir öğenin alt öğeleri görünür olmasına rağmen gizli olarak tanınabileceği düşünülmelidir .

Bu, ilk etapta biraz sezgisel görünüyor - jQuery belgelerine daha yakından bakmak, ilgili bilgileri veriyor:

Öğeler çeşitli nedenlerle gizli olarak kabul edilebilir: [...] Genişlikleri ve yükseklikleri açıkça 0 olarak ayarlanmıştır. [...]

Bu aslında kutu modeli ve elemanın hesaplanan stili açısından anlamlıdır. Genişlik ve yükseklik açıkça 0 olarak ayarlanmamış olsa bile, örtük olarak ayarlanabilir .

Aşağıdaki örneğe bir göz atın:

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 için güncelleme:

JQuery 3 ile açıklanan davranış değişecektir! Öğelerin, sıfır genişlik ve / veya yükseklik dahil olmak üzere herhangi bir düzen kutusu varsa görünür olduğu kabul edilecektir.

JQuery 3.0.0-alpha1 ile JSFiddle:

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

Aynı JavaScript kodunun çıktısı şu olur:

console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false

90

Bu işe yarayabilir:

expect($("#message_div").css("display")).toBe("none");

7
Bu hangi dil / lehçe / kütüphane?
JS'deki

74

Misal:

$(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>


66

Görünür olup olmadığını kontrol etmek için şunu kullanıyorum !:

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

Veya aşağıdakiler de sam'dir, jQuery seçiciyi birden çok kez ihtiyacınız olduğunda daha iyi performans elde etmek için bir değişkene kaydeder:

var $book = $('#book')

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

1
Bir seçiciyi değişkene kaydetmenin gerçekten daha hızlı olduğunu nasıl belirlediniz?
Ilia Rostovtsev

3
Merhaba @Ilia Rostovtsev jsperf.com/caching-jquery-selectors Orada testi çalıştırabilirsiniz. Her neyse, daha hızlı erişilebilmesi için önbelleğe alınması güzel
Matthias Wegtun

2
Aynı nesneyi çağırmak ve çağırmak yerine işlem boyunca tek bir değişken kullanmak istiyorsanız bu uygundur.
Kenneth Palaganas

60

Stil düzenlemeyi değil, sınıf değiştirme özelliğini kullanın. . .

Elemanları "gizlemek" için belirlenmiş sınıfları kullanmak kolaydır ve aynı zamanda en verimli yöntemlerden biridir. 'Gizli' sınıfı ' Displayhiçbiri' stiliyle değiştirmek, o stili doğrudan düzenlemekten daha hızlı gerçekleşir. Yığın Taşması sorusundaki bu konuların bazılarını aynı div'da görünür / gizli iki öğeyi döndürerek açıkladım .


JavaScript En İyi Uygulamaları ve Optimizasyonu

İşte Google ön uç mühendisi Nicholas Zakas'ın bir Google Tech Talk'un gerçekten aydınlatıcı bir videosu:


60

Reklam engelleyici için görünür denetimin kullanılmasına örnek :

$(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", reklam engelleyiciyi engelleyen bir kimliktir. Dolayısıyla, görünür olup olmadığını kontrol ederek reklam engelleyicinin Açık olup olmadığını tespit edebilirsiniz.


58

Sonuçta, hiçbir örnek bana uygun değil, bu yüzden kendim yazdım.

Testler (Internet Explorer desteği yok filter:alpha):

a) Belgenin gizli olup olmadığını kontrol edin

b) Bir elemanın sıfır genişlik / yükseklik / opaklık veya display:none/ visibility:hiddensatır içi stilleri olup olmadığını kontrol edin

c) Öğenin merkezinin (her piksel / köşeyi test etmekten daha hızlı olduğu için) başka bir öğe (ve tüm atalar, örneğin: overflow:hidden/ scroll / bir öğeyi diğerinin üzerinde) tarafından gizlenip gizlenmediğini kontrol edin

d) Bir elemanın sıfır genişlik / yükseklik / opaklık veya display:nonegörünürlük olup olmadığını kontrol edin : hesaplanan stillere gizlenmiş (tüm atalar arasında)

Üzerinde test edildi

Android 4.4 (Yerel tarayıcı / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (Internet Explorer 5-11 belge modları + Internet Explorer 8 sanal makine) ve 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;
    }
})();

Nasıl kullanılır:

is_visible(elem) // boolean

50

Her ikisini de kontrol etmeniz gerekir ... Görünürlüğün yanı sıra ekran:

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

Kontrol edersek $(this).is(":visible"), jQuery her iki şeyi de otomatik olarak kontrol eder.


41

Belki böyle bir şey yapabilirsiniz

$(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>


37

Yalnızca aşağıdaki gibi bir boole değeri kontrol ederek görünürlüğü kontrol edin:

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

Bu kodu her işlev için kullandım. Aksi takdirde is(':visible'), bir öğenin görünürlüğünü kontrol etmek için kullanabilirsiniz .


34

Çünkü Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout( jQuery: visible Selector için açıklandığı gibi ) - öğenin gerçekten bu şekilde görünür olup olmadığını kontrol edebiliriz :

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;
    }
});


30

Öğenin kullanıcı arayüzünde gösterilip gösterilmediğini ölçmek için görünürlük / görüntüleme niteliklerini kontrol etmek amacıyla bir işlev oluşturulabilir.

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

Çalışma keman


29

Ayrıca, öğenin durumunu kontrol etmek ve daha sonra değiştirmek için üçlü bir koşullu ifade:

$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });

4
Veya, tüm şartlardan kurtulun ve deyin $('elementToToggle').toggle('slow');...:)
nbrooks

29
if($('#postcode_div').is(':visible')) {
    if($('#postcode_text').val()=='') {
        $('#spanPost').text('\u00a0');
    } else {
        $('#spanPost').text($('#postcode_text').val());
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.