是可能的切换元件的可见性,使用函数.hide()
,.show()
或.toggle()
.
如何测试元素是可见还是隐藏?
由于问题涉及单个元素,因此该代码可能更合适:
// Checks css for display:[none|block], ignores visibility:[true|false] $(element).is(":visible"); // The same works with hidden $(element).is(":hidden");
与twernt的建议相同,但适用于单个元素; 它与jQuery FAQ中推荐的算法相匹配
您可以使用hidden
选择器:
// Matches all elements that are hidden $('element:hidden')
而visible
选择器:
// Matches all elements that are visible $('element:visible')
if ( $(element).css('display') == 'none' || $(element).css("visibility") == "hidden"){ // element is hidden }
上述方法不考虑父级的可见性.要考虑父母,你应该使用.is(":hidden")
或.is(":visible")
.
例如,
Div2
上述方法将考虑
div2
可见而:visible
不是.但是在许多情况下,上述内容可能很有用,尤其是当您需要查找隐藏父级中是否存在任何可见的错误div时,因为在这种情况下:visible
不起作用.
这些答案都没有解决我所理解的问题,这就是我正在寻找的问题,"我该如何处理有问题的物品visibility: hidden
?" .既:visible
不会也:hidden
不会处理这个,因为他们都在寻找文档显示.据我所知,没有选择器来处理CSS可见性.以下是我如何解决它(标准的jQuery选择器,可能有更简洁的语法):
$(".item").each(function() { if ($(this).css("visibility") == "hidden") { // handle non visible state } else { // handle visible state } });
从如何确定切换元素的状态?
您可以使用:visible
和:hidden
选择器确定元素是否已折叠.
var isVisible = $('#myDiv').is(':visible'); var isHidden = $('#myDiv').is(':hidden');
如果您只是根据其可见性对元素进行操作,则可以只包括:visible
或:hidden
在选择器表达式中.例如:
$('#myDiv:visible').animate({left: '+=200px'}, 'slow');
通常在检查某些东西是否可见时,您将立即前进并使用它做其他事情.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" });
: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
无法利用本机DOMquerySelectorAll()
方法提供的性能提升.要在使用:visible
选择元素时获得最佳性能,首先使用纯CSS选择器选择元素,然后使用.filter(":visible")
.
另外,如果你担心表现,你应该检查现在你看到我...显示/隐藏表现(2010-05-04).并使用其他方法来显示和隐藏元素.
这对我的作品,和我使用show()
,并hide()
让我的DIV隐藏/可见:
if( $(this).css('display') == 'none' ){ /* your code goes here */ } else { /* alternate logic */ }
元素可见性和jQuery如何工作 ;
元素可以隐藏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(); });
我会使用CSS类.hide { display: none!important; }
.
为了隐藏/显示,我打电话.addClass("hide")/.removeClass("hide")
.为了检查可见性,我使用.hasClass("hide")
.
如果您不打算使用.toggle()
或使用.animate()
方法,这是检查/隐藏/显示元素的简单明了的方法.
您也可以使用纯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和内联样式
不需要框架
演示链接
$('#clickme').click(function() {
$('#book').toggle('slow', function() {
// Animation complete.
alert($('#book').is(":visible")); //<--- TRUE if Visible False if Hidden
});
});
可以简单地使用hidden
or visible
属性,例如:
$('element:hidden') $('element:visible')
或者你可以简化同样是如下.
$(element).is(":visible")
ebdiv
应该设置为.它适用于show和hide:
$(document).ready(function(){ $("#eb").click(function(){ $("#ebdiv").toggle(); }); });
您应该考虑的另一个答案是,如果您隐藏了一个元素,您应该使用jQuery,但不是实际隐藏它,而是删除整个元素,但是将其HTML内容和标记本身复制到jQuery变量中,然后您需要做的就是使用法线测试屏幕上是否有这样的标签if (!$('#thetagname').length)
.
当: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;
}
这可能有效:
expect($("#message_div").css("display")).toBe("none");
例:
$(document).ready(function() {
if ($("#checkme:hidden").length) {
console.log('Hidden');
}
});
Category:Fish
Product: Salmon Atlantic
Specie: Salmo salar
Form: Steaks
要检查它是否不可见,我使用!
:
if ( !$('#book').is(':visible')) { alert('#book is not visible') }
或者以下也是sam,将jQuery选择器保存在变量中,以便在需要多次时获得更好的性能:
var $book = $('#book') if(!$book.is(':visible')) { alert('#book is not visible') }
使用指定用于"隐藏"元素的类很容易,也是最有效的方法之一.使用Display
'none'样式切换'hidden'类比直接编辑该样式要快.我在Stack Overflow问题中详细解释了其中的一些问题.在同一个div中转换两个元素可见/隐藏.
以下是Google前端工程师Nicholas Zakas撰写的Google Tech Talk的真实启发视频:
加快你的Javascript(YouTube)
毕竟,没有一个例子适合我,所以我写了自己的.
测试(不支持Internet Explorer filter:alpha
):
a)检查文档是否未隐藏
b)检查元素是否具有零宽度/高度/不透明度或display:none
/ 或visibility:hidden
内联样式
c)检查元素的中心(也因为它比测试每个像素/角更快)是否被其他元素(和所有祖先,例如:overflow:hidden
/ scroll/one element over theother)或屏幕边缘隐藏
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.offset| elem.offset| 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
激活使用adblocker 的可见检查的示例:
$(document).ready(function(){
if(!$("#ablockercheck").is(":visible"))
$("#ablockermsg").text("Please disable adblocker.").show();
});
您需要同时检查...显示和可见性:
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() {
var visible = $('#tElement').is(':visible');
if(visible) {
alert("visible");
// Code
}
else
{
alert("hidden");
}
});
Firstname
只需通过检查布尔值来检查可见性,例如:
if (this.hidden === false) { // Your code }
我为每个函数使用了这个代码.否则,您可以使用它is(':visible')
来检查元素的可见性.
因为Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout
(如jQuery:可见选择器所述) - 我们可以通过这种方式检查元素是否真的可见:
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; } });
但是如果元素的CSS如下所示呢?
.element{ position: absolute;left:-9999; }
所以这个Stack Overflow问题的答案也应该考虑如何检查元素是否在屏幕外.
这里还有一个三元条件表达式来检查元素的状态,然后切换它:
$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });
if($('#postcode_div').is(':visible')) { if($('#postcode_text').val()=='') { $('#spanPost').text('\u00a0'); } else { $('#spanPost').text($('#postcode_text').val()); }
可以创建函数以检查可见性/显示属性,以便衡量元素是否在UI中显示.
function checkUIElementVisible(element) { return ((element.css('display') !== 'none') && (element.css('visibility') !== 'hidden')); }
工作小提琴
.is(":not(':hidden')") /*if shown*/
if($('#id_element').is(":visible")){ alert('shown'); }else{ alert('hidden'); }
我搜索了这个,并没有一个答案对我的情况是正确的,所以我创建了一个函数,如果一个人的眼睛看不到元素,它将返回false
jQuery.fn.extend({ isvisible: function() { // // This function call this: $("div").isvisible() // Return true if the element is visible // Return false if the element is not visible for our eyes // if ( $(this).css('display') == 'none' ){ console.log("this = " + "display:none"); return false; } else if( $(this).css('visibility') == 'hidden' ){ console.log("this = " + "visibility:hidden"); return false; } else if( $(this).css('opacity') == '0' ){ console.log("this = " + "opacity:0"); return false; } else{ console.log("this = " + "Is Visible"); return true; } } });
作为hide()
,show()
并将toggle()
内联css(display:none或display:block)附加到元素.同样,我们可以通过检查显示css轻松使用三元运算符来检查天气元素是隐藏还是可见.
更新:
您还需要检查元素css是否设置为可见性:"可见"或可见性:"隐藏"
如果显示属性设置为inline-block,block,flex,则元素也将可见.
所以我们可以检查元素的属性,使其不可见.所以他们是display: none
和visibility: "hidden";
我们可以创建一个对象来检查负责隐藏元素的属性:
var hiddenCssProps = { display: "none", visibility: "hidden" }
如果key的element属性与hidden属性值匹配,我们可以通过循环遍历对象匹配中的每个键值来检查.
var isHidden = false; for(key in hiddenCssProps) { if($('#element').css(key) == hiddenCssProps[key]) { isHidden = true; } }
如果要检查元素高度:0或宽度:0或更多的属性,可以扩展此对象并向其添加更多属性并进行检查.
谢谢@Krzysztof Przygoda提醒我其他展示属性.
只需检查该元素是否可见并且它将返回一个布尔值,jQuery通过向元素添加display none来隐藏元素,因此如果您想使用纯JavaScript,您仍然可以这样做,例如:
if (document.getElementById("element").style.display === 'block') { // your element is visible, do whatever you'd like }
此外,您可以使用jQuery,因为您可以使用其他代码,并且您拥有较小的代码块,如下面的jQuery,为您执行相同的跟踪:
if ($(element).is(":visible")) { // your element is visible, do whatever you'd like };
在jQuery中使用css方法也可以产生同样的结果:
if ($(element).css('display')==='block') { // your element is visible, do whatever you'd like }
在检查可见性和显示的情况下,您可以执行以下操作:
if ($(this).css("display")==="block"||$(this).css("visibility")==="visible") { // your element is visible, do whatever you'd like }
这就是jQuery在内部解决这个问题的方法:
jQuery.expr.pseudos.visible = function( elem ) { return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); };
如果您不使用jQuery,您只需利用此代码并将其转换为您自己的函数:
function isVisible(elem) { return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); };
这isVisible
将返回true
只要该元素是可见的.
有很多方法可以检查元素在jQuery中是可见还是隐藏.
演示HTML以供参考
ContentContent2
使用可见性过滤器选择器$('element:hidden')
或$('element:visible')
$('element:hidden')
:选择隐藏的所有元素.
Example: $('#content2:hidden').show();
$('element:visible')
:选择所有可见的元素.
Example: $('#content:visible').css('color', '#EEE');
更多信息,请访问http://api.jquery.com/category/selectors/visibility-filter-selectors/
使用is()
过滤
Example: $('#content').is(":visible").css('color', '#EEE'); Or checking condition if ($('#content').is(":visible")) { // Perform action }
更多信息,请访问http://api.jquery.com/is/
你可以用这个:
$(element).is(':visible');
$(document).ready(function()
{
$("#toggle").click(function()
{
$("#content").toggle();
});
$("#visiblity").click(function()
{
if( $('#content').is(':visible') )
{
alert("visible"); // Put your code for visibility
}
else
{
alert("hidden");
}
});
});
This is a Content
我只想澄清一下,在jQuery中,
元素可被视为隐藏,原因如下:
它们的CSS显示值为none.
它们是type ="hidden"的表单元素.
它们的宽度和高度显式设置为0.
隐藏了一个祖先元素,因此该元素不会显示在页面上.
具有可见性的元素:隐藏或不透明度:0被认为是可见的,因为它们仍然占用布局中的空间.在隐藏元素的动画期间,该元素在动画结束前被视为可见.
来源::隐藏选择器| jQuery API文档
if($('.element').is(':hidden')) { // Do something }
这是检查标签是否可见的一些选项
// using a pure CSS selector
if ($('p:visible')) {
alert('Paragraphs are visible (checked using a CSS selector) !');
};
// using jQuery's is() method
if ($('p').is(':visible')) {
alert('Paragraphs are visible (checked using is() method)!');
};
// using jQuery's filter() method
if ($('p').filter(':visible')) {
alert('Paragraphs are visible (checked using filter() method)!');
};
// you can use :hidden instead of :visible to reverse the logic and check if an element is hidden
// if ($('p:hidden')) {
// do something
// };
您可以在可见时添加一个类.添加一个类,show
.然后检查它是否有类:
$('#elementId').hasClass('show');
如果你有这个show
类,它返回true .
像这样添加CSS:
.show{ display: block; }
检查隐藏元素的方法太多了.这是最好的选择(我刚推荐你):
使用jQuery,在CSS中创建一个元素"display:none",用于隐藏.
重点是:
$('element:visible')
以及一个使用示例:
$('element:visible').show();
只需检查display
属性(或visibility
根据您喜欢的隐身类型).示例:
if ($('#invisible').css('display') == 'none') { // This means the HTML element with ID 'invisible' has its 'display' attribute set to 'none' }
$("#myelement div:visible").each( function() { //Do something });
这就是jQuery实现此功能的方式:
jQuery.expr.filters.visible = function( elem ) { return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); };2• 如何检查元素是否在屏幕外-CSS
使用Element.getBoundingClientRect(),您可以轻松检测元素是否在视口的边界内(即屏幕上或屏幕外):
jQuery.expr.filters.offscreen = function(el) { var rect = el.getBoundingClientRect(); return ( (rect.x + rect.width) < 0 || (rect.y + rect.height) < 0 || (rect.x > window.innerWidth || rect.y > window.innerHeight) ); };
然后,您可以通过多种方式使用它:
// returns all elements that are offscreen $(':offscreen'); // boolean returned if element is offscreen $('div').is(':offscreen');
如果您使用Angular,请检查:不要在Angular中使用hidden属性