javascript - display判斷 如何檢查jQuery中是否隱藏了一個元素?



15 Answers

您可以使用hidden選擇器:

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

visible選擇器:

// Matches all elements that are visible
$('element:visible')
jquery判斷css

可以使用函數.show() .toggle() .show().toggle()來切換元素的可見性。

如何測試元素是可見還是隱藏?




這些答案都沒有解決我理解的問題,這就是我正在尋找的問題, “我如何處理具有visibility: hidden項目visibility: hidden ?” 。 既不是:visible也不是:hidden會處理這個,因為他們都在尋找文檔顯示。 據我所知,沒有選擇器來處理CSS可見性。 以下是我如何解決它(標準的jQuery選擇器,可能有更簡潔的語法):

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



通常在檢查某些東西是否可見時,您將立即前進並使用它做其他事情。 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" });



這適用於我,我使用show()hide()使我的div隱藏/可見:

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



我會使用CSS類.hide { display: none!important; } .hide { display: none!important; }

對於隱藏/顯示,我調用.addClass("hide")/.removeClass("hide") 。 為了檢查可見性,我使用.hasClass("hide")

如果您不打算使用.toggle().animate()方法,那麼檢查/隱藏/顯示元素是一種簡單明了的方法。




可以簡單地使用hiddenvisible屬性,例如:

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

或者你可以簡化相同的如下。

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



$('#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查看元素是隱藏還是可見

的jsfiddle:

JSFiddle - ipsjolly - k4WWj




當在jQuery中測試一個元素:hidden選擇器時,應該認為絕對定位元素可以被識別為隱藏,儘管它們的子元素是可見的

這看起來有點違反直覺 - 儘管仔細查看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



例:

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




使用類切換,而不是樣式編輯。 。 。

使用指定用於“隱藏”元素的類很容易,也是最有效的方法之一。 將Display樣式為“無”的“隱藏”類切換比直接編輯該樣式的速度更快。 我在問題中詳細解釋了其中的一些問題。在同一個div中轉換兩個元素可見/隱藏

JavaScript最佳實踐和優化

以下是Google前端工程師Nicholas Zakas撰寫的Google Tech Talk的真實啟發視頻:




激活使用adblocker的可見檢查的示例:

$(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阻止的ID。 因此,檢查它是否可見,您可以檢測adblocker是否已打開。




也許你可以做這樣的事情

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




if($('#postcode_div').is(':visible')) {
    if($('#postcode_text').val()=='') {
        $('#spanPost').text('\u00a0');
    } else {
        $('#spanPost').text($('#postcode_text').val());
}



只需通過檢查布爾值來檢查可見性,例如:

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

我為每個函數使用了這個代碼。 否則,您可以使用is(':visible')來檢查元素的可見性。




這裡還有一個三元條件表達式來檢查元素的狀態,然後切換它:

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



Related