我想过滤掉由于显式 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;
};
有没有更简单的方法来做到这一点?
最佳答案
您可以使用 filter()过滤掉你想要的元素。这将找到正文中的所有元素并返回所有具有显式显示的元素:无 css
$('body').find('*').filter(function(){
return $(this).css('display') == 'none';
});
关于jquery - 选择仅由于继承样式而隐藏的元素(而不是因为没有文本内容),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632119/