如何检查jQuery中是否隐藏了元素?

javascript jquery dom visibility minorin | 2020-02-02 19:35:06


使用函数
.hide()
.show()
.toggle()
可以切换元素的可见性?
如果元素是
visible
hidden
,您将如何测试?





30 答案



由于问题涉及单个元素,此代码可能更适合:
// Checks css for display:[none|block], ignores visibility:[true|false]
$(element).is(":visible");
// The same works with hidden
$(element).is(":hidden");

与twernt的建议相同,但应用于单个元素;并且它与jQuery FAQ中建议的算法相匹配我们使用jQuery is()使用另一个元素、选择器或任何jQuery对象检查所选元素。此方法沿DOM元素遍历以找到满足传递参数的匹配项。如果有匹配项,则返回true,否则返回false。

2020-02-02 19:35:18
rr


您可以使用
hidden
选择器:
// Matches all elements that are hidden
$('element:hidden')

visible选择器:
<3>code>code>pre>

2020-02-02 19:35:18
sdvergil


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

以上方法不考虑父对象的可见性。为了考虑父对象,您应该使用
.is(":hidden")
.is(":visible")

例如,

Div2



上述方法将考虑
div2
可见,而
:visible
不可见。但在许多情况下,上述方法可能会很有用,特别是当您需要查找隐藏父级中是否有任何可见的错误div时,因为在这种情况下
:visible
将不起作用。

2020-02-02 19:35:18
比那民居天子


这些答案都没有回答我所理解的问题,这就是我正在寻找的问题,“我如何处理
visibility: hidden
的项目?”。无论是
:visible
还是
:hidden
都无法处理此问题,因为它们都在根据文档查找显示。据我所知,没有选择器来处理CSS可见性。下面是我的解决方法(标准jQuery选择器,可能有更简洁的语法):
$(".item").each(function() {
if ($(this).css("visibility") == "hidden") {
// handle non visible state
} else {
// handle visible state
}
});

2020-02-02 19:35:18
OnlyTeardrops


如何确定切换元素的状态?
您可以使用
:visible
:hidden
选择器来确定元素是否折叠。
var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');

如果您只是根据元素的可见性对其进行操作,则可以只在选择器表达式中包含
:visible
:hidden
。例如:
 $('#myDiv:visible').animate({left: '+=200px'}, 'slow');

2020-02-02 19:35:18
Azothy


通常,当你检查某件东西是否可见时,你会马上去做别的事情。jQuery chaining使这一点变得简单。
因此,如果您有一个选择器,并且您只想在它是可见的或隐藏的情况下对它执行一些操作,则可以使用
filter(":visible")
filter(":hidden")
然后将它与您要执行的操作链接起来。
因此,如果语句,则不使用
语句,像这样:
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" });

2020-02-02 19:35:18
白河愁


根据jQuery文档的
:visible
选择器:

它们有一个CSS
display
none

它们是具有
type="hidden"

的表单元素,其宽度和高度显式设置为0。
隐藏了一个祖先元素,因此元素不会显示在具有
visibility: hidden
opacity: 0
的元素被认为是可见的,因为它们仍然占用布局中的空间。
这在某些情况下有用,而在其他情况下无用,因为如果要检查元素是否可见(
display != none
),忽略父元素的可见性,您将发现执行
.css("display") == 'none'
不仅更快,而且还将正确返回可见性检查。
如果要检查可见性而不是显示,您应该使用:
.css("visibility") == "hidden"

还要考虑其他jQuery注释:
因为
:visible
是jQuery扩展,而不是CSS规范的一部分,使用
:visible
的查询无法利用本机DOM
querySelectorAll()
方法提供的性能提升。要在使用
:visible
选择元素时获得最佳性能,首先使用纯CSS选择器选择元素,然后使用
.filter(":visible")

另外,如果您关心性能,现在应该检查“显示/隐藏性能”(2010-05-04)。并使用其他方法显示和隐藏元素。

2020-02-02 19:35:18
Gurwell


元素可见性和jQuery是如何工作的;
可以使用
display:none
visibility:hidden
opacity:0
隐藏元素。这些方法之间的区别是:
display:none
隐藏元素,并且不占用任何空间;
visibility:hidden
隐藏元素,但它仍然占用布局中的空间;
opacity:0
将元素隐藏为“可见性:隐藏”,并且它仍然占用布局中的空间;唯一的区别是不透明度允许一个元素部分透明;
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();
});

2020-02-02 19:35:18
刘环


这对我有效,我使用
show()
hide()
使我的div隐藏/可见:
if( $(this).css('display') == 'none' ){
/* your code goes here */
} else {
/* alternate logic */
}

2020-02-02 19:35:18
猫米胡桃


我将使用CSS类
.hide { display: none!important; }

为了隐藏/显示,我调用
.addClass("hide")/.removeClass("hide")
。为了检查可见性,我使用
.hasClass("hide")

如果您不打算使用
.toggle()
.animate()
方法,这是检查/隐藏/显示元素的简单而清晰的方法。

2020-02-02 19:35:18
心在流浪


您也可以使用普通的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有效,而内联样式不需要框架

2020-02-02 19:35:18
absinthe


演示链接

$('#clickme').click(function() {
$('#book').toggle('slow', function() {
// Animation complete.
alert($('#book').is(":visible")); // });
});



Click here



来源:
Blogger即插即用-jQuery工具和小部件:如何使用jQuery查看元素是隐藏的还是可见的

2020-02-02 19:35:18
伪Black


您可以简单地使用
hidden
visible
属性,例如:
$('element:hidden')
$('element:visible')

或者您可以将其简化如下。
$(element).is(":visible")

2020-02-02 19:35:18
田叔NAGATO


ebdiv
应设置为
style="display:none;"
。它对显示和隐藏都有效:
$(document).ready(function(){
$("#eb").click(function(){
$("#ebdiv").toggle();
});
});

2020-02-02 19:35:18
蛋黄


另一个你应该考虑的问题是如果你隐藏了一个元素,你应该使用jQuery,但是你没有真正隐藏它,而是删除了整个元素,但是你把它的HTML内容和标记本身复制到一个jQuery变量中,然后你需要做的就是测试屏幕上是否有这样的标记,使用普通的
if (!$('#thetagname').length)

2020-02-02 19:35:18
大雾


当针对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;
}






使用JQUERY 3更新JQUERY 3.x:
所述行为将更改!如果元素有任何布局框,包括零宽度和/或高度的布局框,则它们将被视为可见。
JSFiddle with jQuery 3.0.0-alpha1:
http://JSFiddle.net/pM2q3/7/
相同的JS将具有以下输出:
console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false

2020-02-02 19:35:18
常笑之魔女


这可能有效:
expect($("#message_div").css("display")).toBe("none");

2020-02-02 19:35:18
Tiffany


示例:
$(document).ready(function() {
if ($("#checkme:hidden").length) {
console.log('Hidden');
}
});



Category:Fish

Product: Salmon Atlantic

Specie: Salmo salar

Form: Steaks


2020-02-02 19:35:18
刺の声


要检查它是否不可见,我使用
!

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

或以下也是sam,将jQuery选择器保存在一个变量中,以便在需要多次时具有更好的性能:
var $book = $('#book')
if(!$book.is(':visible')) {
alert('#book is not visible')
}

2020-02-02 19:35:18
ttsama


使用类切换,而不是样式编辑。…
使用指定用于“隐藏”元素的类很容易,也是最有效的方法之一。使用
Display
样式“none”切换类“hidden”将比直接编辑该样式执行得更快。我在Stack Overflow问题中详细解释了其中的一些问题,将两个元素隐藏在同一个div中。
JavaScript最佳实践和优化
这里是一个真正有启发性的视频,内容是Google前端工程师Nicholas Zakas的Google技术讲座:
加速JavaScript(YouTube)

2020-02-02 19:35:18


毕竟,没有一个例子适合我,所以我自己写的。
测试(不支持Internet Explorer
filter:alpha
):
a)检查文档是否没有隐藏
b)检查元素是否具有零宽度/高度/不透明度,或在内联样式中是否具有
display:none
/
visibility:hidden
检查中心(也因为它比测试每个像素都快)元素的/corner)不被其他元素(以及所有祖先,示例:
overflow:hidden
/scroll/one element over enother)或屏幕边缘
d)检查元素是否具有零宽度/高度/不透明度或
display:none
/visibility:隐藏在计算样式中(在所有祖先中)

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

2020-02-02 19:35:18
键盘清洁胶


激活adblocker的可见检查示例:

$(document).ready(function(){
if(!$("#ablockercheck").is(":visible"))
$("#ablockermsg").text("Please disable adblocker.").show();
});





“ablockercheck”是adblocker阻塞的ID。因此,检查它是否可见,您可以检测到是否开启了adblocker。

2020-02-02 19:35:18
sakimo


你需要检查两个。。。显示和可见性:
if ($(this).css("display") == "none" || $(this).css("visibility") == "hidden") {
// The element is not visible
} else {
// The element is visible
}

如果我们检查
$(this).is(":visible")
,jQuery将自动检查这两个对象。

2020-02-02 19:35:18
bbscom


也许你可以这样做
$(document).ready(function() {
var visible = $('#tElement').is(':visible');
if(visible) {
alert("visible");
// Code
}
else
{
alert("hidden");
}
});


Firstname

2020-02-02 19:35:18
irearn


只需通过检查布尔值来检查可见性,例如:
if (this.hidden === false) {
// Your code
}

我为每个函数使用了此代码。否则,您可以使用
is(':visible')
检查元素的可见性。

2020-02-02 19:35:18
謎のヒロインA-X


因为
Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout
(如jQuery:visible Selector所述)-我们可以通过这种方式检查元素是否真的可见:
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;
}
});

2020-02-02 19:35:18
开颅狂魔


但是如果元素的CSS如下所示呢?
.element{
position: absolute;left:-9999;
}

因此,这个堆栈溢出问题的答案应该考虑如何检查元素是否在屏幕外。

2020-02-02 19:35:18
触手缠绕


这里还有一个三值条件表达式,用于检查元素的状态,然后进行切换:
$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });

2020-02-02 19:35:18
卡洛德·兰


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

2020-02-02 19:35:18
异形


可以创建一个函数来检查可见性/显示属性,以便判断元素是否显示在UI中。
function checkUIElementVisible(element) {
return ((element.css('display') !== 'none') && (element.css('visibility') !== 'hidden'));
}

工作小提琴

2020-02-02 19:35:18
夲亽巳死


World is powered by solitude
备案号:湘ICP备19012068号