jQuery 提供兩個與可見性相關的偽類選擇器:
:hidden — 匹配所有隱藏的元素:visible — 匹配所有可見的元素元素被視為「隱藏」的條件任一滿足即可:
display: nonetype="hidden"opacity: 0、visibility: hidden 不算 隱藏(仍佔據佈局空間)<form id="formID">
<input id="inputID" type="text" style="display: none" />
</form>
<script>
// 方法 1:使用 .is() 篩選
if ($("#inputID").is(":visible")) {
console.log("元素可見");
} else {
console.log("元素隱藏");
}
// 方法 2:直接檢查 CSS display (不推薦,無法覆蓋祖先隱藏情況)
if ($("#inputID").css("display") === "none") {
console.log("display 為 none");
}
</script>
<script>
if ($("#elem_id").is(":hidden")) {
// 元素隱藏時的邏輯
$("#elem_id").show(); // 顯示它
}
</script>
var visibleCount = $(":visible").length;
var hiddenCount = $(":hidden").length;
console.log("可見:", visibleCount, "隱藏:", hiddenCount);
$("button:visible").on("click", function() {
// 僅當按鈕可見時觸發
});
$("#box").fadeOut(400, function() {
// 動畫結束後,:hidden 才會匹配
if ($(this).is(":hidden")) {
console.log("淡出完成,已隱藏");
}
});
| 誤區 | 正確認知 |
|---|---|
以為 visibility: hidden 會被 :hidden 匹配 | 不會,因元素仍佔據空間,:hidden 只匹配「不佔據佈局空間」的元素 |
在 display:none 元素上調用 .hide() 會報錯 | 不會報錯,jQuery 內部會忽略已隱藏元素 |
:visible 包含 opacity:0 元素 | 是的,透明度為 0 仍視為可見 |
:visible/:hidden 是 jQuery 擴展選擇器,無法利用瀏覽器原生 querySelectorAll,大量元素時較慢。var $el = $("#id"); if ($el.is(":visible")) ...display 時,直接用 el.style.display === 'none' 或 getComputedStyle(el).display === 'none' 更高效。