このページのすべてのメソッドのJSPerf
編集:私の元のメソッドが高速である理由は、使用する必要が.find('>' + selector)
ある場所.children()
を使用したためです(これはすべての子をループし、要素がセレクターと一致するかどうかをチェックします)。
div
はネイティブにサポートされているセレクターであり、テストケースには深くネストされた要素が含まれていないため、私のソリューションは高速であることがわかりました。しかし、それを正規化した後、それはqwertymksソリューションとほぼ同じに見えます。これら2つのソリューションのJSPerfは、関数呼び出しが1つ少ないため、彼のソリューションがわずかに高速であることを示しています。
このページの解決策は一般的です。以下のコードは、特定の場合(セレクターが単なるタグであるという事実など)に最適化できます。http://jsfiddle.net/kFZJs/
:visible
ネイティブCSSセレクターではないため、進行を高速化するには、セレクターを分割します。
目的のソリューションはパフォーマンスが高い必要があるため、推奨されるソリューションでは、使用するjQueryをできるだけ少なくする必要があります。これを行うには、のロジックを調べ:visible
ます。
元の関数にはが含まれていますjQuery.support.reliableHiddenOffsets
。子がテーブルセル(IE8-でのみ使用される)でない場合、これを安全に削除してパフォーマンスを向上させることができます。
次に、jQueryプラグインを作成します(高価ではありません)。
(function($) {
$.fn.hasAtLeastOneVisibleChild = function(selector) {
var $col = this.children(selector), i, elem;
for (i=0; i<$col.length; i++) {
var elem = $col[i];
if (elem.offsetWidth !== 0 || elem.offsetHeight !== 0) {
return true;
}
}
return false;
};
})(jQuery);
// Usage:
$this.hasAtLeastOneVisibleChild('div'); // True or false