javascript - jquery隱藏欄位 - js顯示隱藏
如何檢查jQuery中是否隱藏了一個元素? (20)
使用類切換,而不是樣式編輯。 。 。
使用指定用於“隱藏”元素的類很容易,也是最有效的方法之一。 將Display
樣式為“無”的“隱藏”類切換比直接編輯該樣式的速度更快。 我在Stack Overflow問題中詳細解釋了其中的一些問題。在同一個div中轉換兩個元素可見/隱藏 。
JavaScript最佳實踐和優化
以下是Google前端工程師Nicholas Zakas撰寫的Google Tech Talk的真實啟發視頻:
- 加快你的Javascript (YouTube)
可以使用函數.show()
.toggle()
.show()
或.toggle()
來切換元素的可見性。
如何測試元素是可見還是隱藏?
:visible
根據jQuery文檔的 :visible
選擇器:
- 它們的CSS
display
值為none
。- 它們是
type="hidden"
表單元素。- 它們的寬度和高度顯式設置為0。
- 隱藏了一個祖先元素,因此該元素不會顯示在頁面上。
具有
visibility: hidden
元素visibility: hidden
或opacity: 0
被認為是可見的,因為它們仍然佔用佈局中的空間。
這在某些情況下很有用而在其他情況下沒用,因為如果你想檢查元素是否可見( display != none
),忽略父母的可見性,你會發現做.css("display") == 'none'
不僅速度更快,而且還能正確返回可見性檢查。
如果要檢查可見性而不是顯示,則應使用: .css("visibility") == "hidden"
。
還要考慮額外的jQuery註釋 :
因為
:visible
是一個jQuery擴展而不是CSS規範的一部分,使用:visible
查詢無法利用本機DOMquerySelectorAll()
方法提供的性能提升。 要在使用時獲得最佳性能:visible
選擇元素,首先使用純CSS選擇器選擇元素,然後使用.filter(":visible")
。
另外,如果你擔心表現,你應該檢查現在你看到我...顯示/隱藏表現 (2010-05-04)。 並使用其他方法來顯示和隱藏元素。
元素可見性和jQuery如何工作 ;
可以使用display:none
隱藏元素display:none
, visibility:hidden
或opacity:0
。 這些方法之間的區別:
-
display:none
隱藏元素,不佔用任何空間; -
visibility:hidden
隱藏了元素,但它仍然佔用了佈局中的空間; opacity:0
將元素隱藏為“visibility:hidden”,它仍佔用佈局中的空間; 唯一的區別是不透明度讓一個元素部分透明;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(); });
也許你可以做這樣的事情
$(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 ($(this).css("display") == "none" || $(this).css("visibility") == "hidden") {
// The element is not visible
} else {
// The element is visible
}
如果我們檢查$(this).is(":visible")
,jQuery會自動檢查這兩件事。
例:
$(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>
可以創建函數以檢查可見性/顯示屬性,以便衡量元素是否在UI中顯示。
function checkUIElementVisible(element) {
return ((element.css('display') !== 'none') && (element.css('visibility') !== 'hidden'));
}
可以簡單地使用hidden
或visible
屬性,例如:
$('element:hidden')
$('element:visible')
或者你可以簡化相同的如下。
$(element).is(":visible")
您可以使用:visible
和:hidden
選擇器確定元素是否已折疊。
var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');
如果您只是根據其可見性對元素進行操作,則可以在選擇器表達式中包含:visible
或:hidden
。 例如:
$('#myDiv:visible').animate({left: '+=200px'}, 'slow');
您也可以使用純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;
}
筆記:
無處不在
適用於嵌套元素
適用於CSS和內聯樣式
不需要框架
我會使用CSS類.hide { display: none!important; }
.hide { display: none!important; }
。
對於隱藏/顯示,我調用.addClass("hide")/.removeClass("hide")
。 為了檢查可見性,我使用.hasClass("hide")
。
如果您不打算使用.toggle()
或.animate()
方法,那麼檢查/隱藏/顯示元素是一種簡單明了的方法。
由於問題涉及單個元素,因此該代碼可能更合適:
// Checks css for display:[none|block], ignores visibility:[true|false]
$(element).is(":visible");
// The same works with hidden
$(element).is(":hidden");
與twernt的建議相同,但適用於單個元素; 它與jQuery FAQ中推薦的算法相匹配
畢竟,沒有一個例子適合我,所以我寫了自己的。
測試 (不支持Internet Explorer filter:alpha
):
a)檢查文檔是否未隱藏
b)檢查元素是否具有零寬度/高度/不透明度或display:none
/ visibility:hidden
在內聯樣式中
c)檢查元素的中心(也因為它比測試每個像素/角更快)是否被其他元素(和所有祖先,例如: overflow:hidden
/ scroll / one element over theother)或屏幕邊緣overflow:hidden
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
要檢查它是否不可見我使用!
:
if ( !$('#book').is(':visible')) {
alert('#book is not visible')
}
或者以下也是sam,將jQuery選擇器保存在變量中,以便在需要多次時獲得更好的性能:
var $book = $('#book')
if(!$book.is(':visible')) {
alert('#book is not visible')
}
這些答案都沒有解決我理解的問題,這就是我正在尋找的問題, “我如何處理具有visibility: hidden
項目visibility: hidden
?” 。 既不是:visible
也不是:hidden
會處理這個,因為他們都在尋找文檔顯示。 據我所知,沒有選擇器來處理CSS可見性。 以下是我如何解決它(標準的jQuery選擇器,可能有更簡潔的語法):
$(".item").each(function() {
if ($(this).css("visibility") == "hidden") {
// handle non visible state
} else {
// handle visible state
}
});
這裡還有一個三元條件表達式來檢查元素的狀態,然後切換它:
$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });
這適用於我,我使用show()
和hide()
使我的div隱藏/可見:
if( $(this).css('display') == 'none' ){
/* your code goes here */
} else {
/* alternate logic */
}
$('#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:
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
。 但是在許多情況下,上述內容可能很有用,尤其是當您需要查找隱藏父級中是否有任何錯誤div時,因為在這種情況下:visible
不起作用。