提问
可以使用函数
.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 中推荐的算法相匹配
其它参考1
您可以使用
hidden
选择器:[101]// Matches all elements that are hidden
$('element:hidden')
而
visible
选择器:[102]// Matches all elements that are visible
$('element:visible')
其它参考2
if ( $(element).css('display') == 'none' ){
// element is hidden
}
函数不适用于visibility属性。
其它参考3
这些答案都没有解决我理解的问题,这就是我正在寻找的问题,我如何处理
visibility: hidden
?的项目。 :visible
和:hidden
都不会处理这个问题,因为他们都在寻找文档显示。据我所知,没有选择器来处理CSS可见性。以下是我如何解决它(标准的jQuery选择器,可能有更简洁的语法):$(".item").each(function() {
if ($(this).css("visibility") == "hidden") {
// handle non visible state
} else {
// handle visible state
}
});
其它参考4
从如何确定切换元素的状态? [103]
您可以使用
:visible
和:hidden
选择器确定元素是否折叠。var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');
如果您只是根据其可见性对元素进行操作,则可以在选择器表达式中包含
:visible
或:hidden
。例如: $('#myDiv:visible').animate({left: '+=200px'}, 'slow');
其它参考5
通常在检查某些东西是否可见时,您将立即前进并使用它做其他事情。 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" });
其它参考6
:visible
选择器根据jQuery文档:[104]
- 他们的CSS
display
值为none
。
- 它们是
type="hidden"
的表单元素。
- 它们的宽度和高度明确设置为0.
- 隐藏了一个祖先元素,因此该元素不会显示在页面上。
具有visibility: hidden
或opacity: 0
的元素被认为是可见的,因为它们仍然占用布局中的空间。
这在某些情况下很有用而在其他情况下没用,因为如果你想检查元素是否可见(
display != none
),忽略父的可见性,你会发现做.css("display") == 'none'
不仅更快,但也会正确返回可见性检查。如果要检查可见性而不是显示,则应使用:
.css("visibility") == "hidden"
。还要考虑额外的jQuery注释:[105]
因为:visible
是jQuery扩展而不是CSS规范的一部分,所以使用:visible
的查询无法利用本机DOMquerySelectorAll()
方法提供的性能提升。要在使用:visible
选择元素时获得最佳性能,请先使用纯CSS选择器选择元素,然后使用.filter(":visible")
。
此外,如果您担心性能,则应检查现在您看到我...显示/隐藏性能(2010-05-04)。并使用其他方法来显示和隐藏元素。[106]
其它参考7
这适用于我,我使用
show()
和hide()
使我的div隐藏/可见:if( $(this).css('display') == 'none' ){
/* your code goes here */
} else {
/* alternate logic */
}
其它参考8
元素可见性和jQuery如何工作; [107]
可以使用
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(); });
其它参考9
我会使用CSS类
.hide { display: none!important; }
。为了隐藏/显示,我打
.addClass("hide")/.removeClass("hide")
。为了检查可见性,我使用.hasClass("hide")
。如果您不打算使用
.toggle()
或.animate()
方法,那么检查/隐藏/显示元素是一种简单明了的方法。其它参考10
您也可以使用纯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和内联样式
- 不需要框架
其它参考11
可以简单地使用
hidden
或visible
属性,例如:$('element:hidden')
$('element:visible')
或者您可以使用 进行简化,如下所示。
$(element).is(":visible")
其它参考12
您应该考虑的另一个答案是,如果您隐藏了一个元素,您应该使用jQuery,但不是实际隐藏它,而是删除整个元素,但是将其HTML内容和标记本身复制到jQuery变量中,然后您需要做的就是使用法线
if (!$('#thetagname').length)
测试屏幕上是否有这样的标签。[108] [109]其它参考13
ebdiv
应设为style="display:none;"
。它适用于展示和隐藏:$(document).ready(function(){
$("#eb").click(function(){
$("#ebdiv").toggle();
});
});
其它参考14
$('#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="" />
当在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>
这可能有效:
expect($("#message_div").css("display")).toBe("none");
其它参考15
要检查它是否不可见,我使用
!
:if ( !$('#book').is(':visible')) {
alert('#book is not visible')
}
或者以下也是sam,将jQuery选择器保存在变量中,以便在需要多次时获得更好的性能:
var $book = $('#book')
if(!$book.is(':visible')) {
alert('#book is not visible')
}
其它参考16
例:
$(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
样式无切换隐藏类将比直接编辑该样式执行得更快。我在Stack Overflow问题中彻底解释了一些问题在同一个div中显示/隐藏两个元素。JavaScript最佳实践和优化
以下是Google前端工程师Nicholas Zakas撰写的Google Tech Talk的真实启发视频:
- 加快您的Javascript (YouTube)
其它参考17
激活使用可见检查adblocker的示例:[111]
$(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>
毕竟,没有一个例子适合我,所以我写了自己的。
测试(不支持互联网 资源管理器
filter:alpha
):a)检查文档是否未隐藏
b)检查内联样式中元素的宽度/高度/不透明度是否为零或
display:none
/visibility:hidden
c)检查元素的中心(也因为它比测试每个像素/角更快)是否未被其他元素(和所有祖先,例如:
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 Explorer 5-11文档模式+ Internet 资源管理器8(虚拟机),Safari(Windows/Mac/iOS)[112]
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
其它参考18
你需要检查两个......显示和可见性:
if ($(this).css("display") == "none" || $(this).css("visibility") == "hidden") {
// The element is not visible
} else {
// The element is visible
}
如果我们检查
$(this).is(":visible")
,jQuery会自动检查这两件事。其它参考19
也许你可以做这样的事情
$(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>
因为
Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout
(如jQuery:可见选择器所述) - 我们可以通过这种方式检查元素是否真正可见:[113]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;
}
});
其它参考20
if($('#postcode_div').is(':visible')) {
if($('#postcode_text').val()=='') {
$('#spanPost').text('\u00a0');
} else {
$('#spanPost').text($('#postcode_text').val());
}
其它参考21
但是,如果元素的CSS如下所示呢?
.element{
position: absolute;left:-9999;
}
所以这个Stack Overflow问题的答案如何检查元素是否在屏外也应该考虑。
其它参考22
可以创建函数以检查可见性/显示属性,以便衡量元素是否在UI中显示。
function checkUIElementVisible(element) {
return ((element.css('display') !== 'none') && (element.css('visibility') !== 'hidden'));
}
工作小提琴[115]
其它参考23
只需通过检查布尔值来检查可见性,例如:
if (this.hidden === false) {
// Your code
}
我为每个函数使用了这个代码。否则,您可以使用
is(':visible')
检查元素的可见性。其它参考24
这里还有一个三元条件表达式来检查元素的状态,然后切换它:
$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });
推荐文章
- javascript - 在Express Route中使用Multer? (使用MEANJS)
- javascript - 不推荐使用Firefox window.controllers。不要将它用于UA检测
- javascript - 重新加载AngularJS控制器
- javascript - node.js回调中'done'和'next'之间的区别
- javascript - app.set('port',8080)与Express.js中的app.listen(8080)
- javascript - Angular UI-Router - 在解决方案中返回被拒绝的promise不会停止状态转换
- javascript - 隐藏ng-options中的选项
- javascript - 没有Ember Data的Ember
- javascript - Angular JS - 使用Interval进行变量更新
- javascript - 使用量角器测试非AngularJS页面上的登录
- javascript - Moment.js - 如何检测夏令时并添加一天
- 将pop()与JavaScript关联数组一起使用
- JavaScript - XMLHttpRequest,Access-Control-Allow-Origin错误
- HTML - 如何使用javascript更改div的背景图像?
- javascript - 如何在Angular-js指令中定义一个函数
- javascript - 用于上传PDF的Jquery Flipbook
- javascript - 将Google地图样式数组转换为Google静态地图样式字符串
- javascript - 如果使用SHIFT,如何获取字符的keyCode?
- c# - 无法在jquery对话框中单击asp.net按钮
- javascript - 为什么对象上的函数是从自执行函数执行的?
Coderlord.com Copyright © 保留所有权利.浙ICP备14035270号