2013-01-19 14 views

答えて

6

を使用することができます。

var displayed = $('mySelector').filter(function() { 
    var element = $(this); 

    if(element.css('display') == 'none') { 
     element.remove(); 
     return false; 
    } 

    return true; 
}); 

これはあなたの選択のthatsからのすべての要素がdisplay属性が返されますがnoneではない、としているのです人々を削除します。

+0

注意を。 '.css()'メソッドは、スタイルシートから継承されたスタイルを取り上げません。 – Barmar

+0

あなたはこれを何と言いますか? jQueryのドキュメントによると、 '.css()'は**計算された**スタイルのプロパティなので、継承されたスタイルを含みます。ここにこれが本当であることを示すデモがあります - https://jsfiddle.net/6uncqqk2/ –

+1

私は過去に計算されたスタイルを使用していなかった疑問を見たことがあります。たぶん、私はプレーンなJS 'element.style.display'を使用するコードを考えていました。 – Barmar

2

あなたが.filter()を使用することができますfilter()

var listWithoutDisplayNone = elementList.filter(function(){ 
     if($(this).css('display') != 'none') 
      return $(this); 
}); 
8
$("selector").is(":visible") 

また、元のセレクタの隠し要素フィルタリングすることができます彼らの `style`属性にNONE`:これが唯一の明示的な`ディスプレイを持っている要素を見つけること

$("selector:visible") 
+0

私は現在、 'display:none'と' display:block'を切り替える要素にこれを使用しています。この目的のためにそれを使用する際に問題や矛盾がありますか? – Abdul

+0

@Abdulそれはうまくいくはずです。 jQueryは 'display'プロパティと' visibility'プロパティの両方をチェックして、要素が可視かどうかをチェックします。 – Barmar

+1

これはしばしば目標を達成しますが、重要な違いが1つあります(@Barmarで述べたように、可視性もチェックします)。親要素の可視性もチェックします。だから本当に 'display:none'で要素だけをフィルタリングしたいのであれば、':visible'は偽陽性を与えます。 – ScottSB

関連する問題