0
var isAnyBool = $(selector)
 .filter(function(){ return this.style.display !== "none"; })
 .length;

// if (isAnyBool) { .. }

これは期待どおりに機能しますが、単純な true/false だけが必要な場合、すべての要素を不必要にカウントします。より効率的になるためにどのように改善できますか?

更新:visible要素が直接隠されているのか、親の一部が実際に隠されているのかがわからないため、チェックするかstyle.display、機能的に同等のものを使用する必要があります

4

6 に答える 6

6

パフォーマンス効率についてはわかりませんが、これははるかに読みやすいです。

var isAnyBool = $(selector).is(':visible');

編集#2:

@dandavisの答えが最高だと思います

于 2013-06-27T20:10:02.980 に答える
2

あなたはそれを簡単にすることができます:visible

var isAnyBool = $(selector).filter(':visible').length;
于 2013-06-27T20:10:21.393 に答える
2
var isAnyBool =  $(selector+"[style*='display: none']").length > 0 ;

最新のブラウザーでは、あらゆるタイプの反復よりもはるかに高速です。

jQuery の :visible は style.display 以外にも影響を受ける可能性があるため、この作業には適切なツールではありません。

これはスタイル属性のみをチェックし、js の反復なしでチェックするため、執筆時点で提供されている最も高速で単純なソリューションになります。

于 2013-06-27T20:15:13.103 に答える
2

要素をフィルタリングしてカウントする代わりに、同じコールバックで.is()メソッドを使用できます。

var isAnyBool = $(selector).is(function(){ return this.style.display !== "none"; })
于 2013-06-27T20:17:27.237 に答える
1

それはカウントされません..length関数ではなくプロパティです。そのため、あなたが電話をかけるときはあまり進んでいません.length

長さを保存する代わりに、他の場所で使用できる場合に備えて結果を保存します。

var mySelector = $(selector).filter(function(){ return this.style.display !== "none"; })

if (mySelector.length) { .. }
于 2013-06-27T20:08:04.863 に答える