选择仅由于继承样式而隐藏的元素(不是由于没有文本内容)

时间:2012-07-24 13:40:00

标签: jquery css dom

我想过滤掉由于显式display: none本身隐藏的元素(来自给定的jQuery对象),或者由于祖先被隐藏而不是因为它恰好没有文本在选择时。

例如:

<p id="p"></p>

现在,$('#p').is(':hidden')将为true,因为该段落中没有文字内容,因此没有可见的宽度或高度。但是,如果我在p中放入一些文本,jQuery将不再将其视为隐藏。我的代码需要找到这种元素并将文本放入其中。

不幸的是,元素的计算样式不会从祖先继承display: none,所以看起来找出是否由于样式而隐藏某些东西的唯一方法是将树向上移动直到具有{{1的元素找到了:

display: none

有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以使用filter()过滤掉所需的元素。这将找到正文中的所有元素并返回所有具有显式显示的元素:none css

$('body').find('*').filter(function(){ 
    return $(this).css('display') == 'none';
});

http://jsfiddle.net/Yrc4M/