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

标签 jquery css dom

我想过滤掉由于显式 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';
});

http://jsfiddle.net/Yrc4M/

关于jquery - 选择仅由于继承样式而隐藏的元素(而不是因为没有文本内容),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632119/

相关文章:

jquery - 当相邻元素淡出时动画位置

html - 如何在图像上制作 CSS 边框?

Java Dom API getAttribute

PHPDOM : how to edit style in HTML element

javascript - 优化巨大的 JSON 响应

javascript - 如何在 Canvas 底部居中放置多个 div?

jquery - 链接在水平菜单中不起作用

javascript - 我可以在处理事件时依赖 attach order 吗?

jQuery Accordion 多个元素对齐

css - flex 模型 : second row with width of element of first row