3

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

例如:

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

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

不幸的是,元素的计算样式并没有display: none从祖先继承,所以似乎唯一的方法是找出是否由于样式而隐藏了某些东西是遍历树直到display: none找到一个元素:

jQuery.expr.filters.reallyHidden = function(elem) {
    do {
        if (jQuery.css( elem, "display" ) === "none") {
            return true;
        }
        elem = elem.parentNode;
    } while (elem);
    return false;
};

有没有更简单的方法来做到这一点?

4

1 回答 1

1

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

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

http://jsfiddle.net/Yrc4M/

于 2012-07-24T14:34:10.293 回答