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()を使用して、必要な要素を除外できます。これにより、本体内のすべての要素が検索され、明示的な display:none css を持つすべての要素が返されます。

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

http://jsfiddle.net/Yrc4M/

于 2012-07-24T14:34:10.293 に答える