由于隐藏可见性仍占用空间,jQuery认为它们可见。
下面是引自the docs:
元素被认为是可见的,如果他们消耗在文档中的空间。可见元素的宽度或高度大于零。
带有visibility:hidden
或opacity: 0
的元素被视为可见,因为它们仍占用布局空间。
如果要检查元素的visibillity
没有设置为hidden
,使用此:
if ($('#test h3').css('visibility') == 'visible') {
alert('visible');
}
要检查的祖先太,使用此:
var visible = true;
$('#test h3').parents().addBack().each(function() {
if ($.css(this, 'visibility') != 'visible') return visible = false;
});
if (visible) {
// do whatever...
}
你可以抽象所有到一个可重用filter expression:
jQuery.expr[':']['visible-real'] = function(el) {
var visible = true;
$(el).parents().addBack().each(function() {
if ($.css(this, 'visibility') != 'visible') return visible = false;
});
return visible;
};
然后你可以用它当你需要它,如下所示:
if ($('#test h3').is(':visible-real')) {
alert('visible');
}
这里的小提琴:http://jsfiddle.net/3LGm7/
你的代码是完全的语法错误。请纠正它们。 –
$('#test h3')... – Eric
@SethMcClaine - 他不是一个家伙,只是指出显而易见的事实。 – adeneo