在我的案例中,我有一个奇怪的问题.
我有隐藏的东西,但jquery找不到它.
HTML
<div id='test'>
<h3>title here</h3>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
#test h3 {
visibility: hidden;
}
Run Code Online (Sandbox Code Playgroud)
JS
if (('#test h3').is(':visible')) {
alert('visible');
}
Run Code Online (Sandbox Code Playgroud)
我不应该得到警报框,因为我的h3标签被隐藏但警报框不断弹出.任何人都可以帮我这个奇怪的问题吗?非常感谢!
由于隐藏可见性仍然占用空间,jQuery认为它们是可见的.
以下是文档的引用:
如果元素占用文档中的空间,则认为元素是可见的.可见元素的宽度或高度大于零.
具有
visibility:hidden或被opacity: 0认为可见的元素,因为它们仍然占用布局中的空间.
如果要检查元素visibillity是否未设置为hidden,请使用以下命令:
if ( $('#test h3').css('visibility') == 'visible' ) {
alert('visible');
}
Run Code Online (Sandbox Code Playgroud)
要检查祖先,请使用以下命令:
var visible = true;
$('#test h3').parents().addBack().each(function() {
if ( $.css(this, 'visibility') != 'visible' ) return visible = false;
});
if ( visible ) {
// do whatever...
}
Run Code Online (Sandbox Code Playgroud)
您可以将所有内容抽象为可重用的过滤器表达式:
jQuery.expr[':']['visible-real'] = function(el) {
var visible = true;
$(el).parents().addBack().each(function () {
if ( $.css(this, 'visibility') != 'visible' ) return visible = false;
});
return visible;
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以在需要时使用它,如下所示:
if ( $('#test h3').is(':visible-real') ) {
alert('visible');
}
Run Code Online (Sandbox Code Playgroud)
这是小提琴:http://jsfiddle.net/3LGm7/
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |