1

次のコード行があります。

var filterInputs = $(this).siblings('.filterInputs');

filterInputs でいくつかの作業を実行します。後で、filterInputs のコレクションを表示されるものだけに減らしたいと思います。

明らかに、私はこれを行うことができます:

var visibleFilterInputs = $(this).siblings('.filterInputs:visible');

しかし、私が減らしたいと思っていたコレクションへの参照がすでにあるという事実を考えると、それは非効率的です。

次のような言い方はありますか?

//TODO: Example
var visibleFilterInputs = $(filterInputs:visible);

DOM ツリーを再度反復する必要はありませんか? ありがとう

4

1 に答える 1

3

あなたは絶対に正しいです、あなたはすでにjQueryオブジェクトにそれらを持っているので、DOM要素を再収集する理由はありません。これがまさにこの.filter()メソッドの目的です: http: //api.jquery.com/filter/

これを試して:

var visibleFilterInputs = filterInputs.filter(":visible");

次に例を示します:http://jsfiddle.net/FC9sH/

セレクターをもう少し効率的<div>にするために、などの特定のHTMLタグをターゲットにすることをお勧めします(これはCSS仕様の一部ではなく、ネイティブメソッドでは最適化できないため)。:visible少なくともあなたの場合、あなたはすでにfilterInputsクラスを使用しています。とにかく、多分次のようなものです:

var visibleFilterInputs = filterInputs.filter("div:visible");

ただし、それが該当する場合に限ります。つまり、複数の既知の要素タグを選択することでさえ、おそらくより良いでしょう:

var visibleFilterInputs = filterInputs.filter("div:visible, p:visible");
于 2013-03-12T16:32:07.287 に答える