2011-07-15 8 views
2

これを書くための方法はありますか?自己を含むすべての要素をフィルタリングするためのショートカット?

$myelements.find('*').andSelf().filter(myselector) 

私が言うことができる限り、これを除いてすべての子孫を検索する方法はありません。

これが機能しない場合は、1つ書きますが、既に存在する場合は再作成したくありません。ここで


は、それが(改訂)されています

(function($,undefined) { 
    $.fn.all = function(selector) { 
     if(selector===undefined) return this.find('*').andSelf(); 
     return this.find(selector).add(this.filter(selector)); 
    } 
})(jQuery); 
+0

いいえ、そのホイールは現在存在しません(要素階層を下に移動する「反」-'closest()メソッドはありません)。あなたは進んでそれを発明することができます。ただし、 'andSelf()' *は存在し、その呼び出しには9文字しかかかりません。 –

+0

@Frederic:あの愚かな '.find( '*')'が必要なので、9文字だけではありません。これはおそらく非効率です。なぜなら、私が望むものだけでなくすべての要素を取り出すからです。 – mpen

答えて

2

ませAPIでそれを行うための方法はしかし、そこではありませんセレクタで通常の.find()を実行してから、その要素にのみ.filter()を適用すると、パフォーマンスが向上することがあります。

var all = $myelements.find(myselector).add($myelements.filter(myselector)); 

この方法では、有効なセレクタを使用している場合はquerySelectorAllを使用できます。

それ以外の場合は、ネイティブコード(サポートされているブラウザ)ではなくJavaScriptコードでフィルタを完全に実行しています。

もちろん、プラグインにすることもできます。

0

そうでもないより良い:

$($myelements + ', ' + $myelements + ' > *').filter(myselector); 
+2

それは悪い男です:) – AlienWebguy

+0

ええ、それは実際には*より*文字です。 :D – wanovak

+1

'$ myelements'が文字列だとしますか?前の '$'はjqueryオブジェクトであることを示すのに使用される規約です。これはオブジェクトのように使用していたことからも明らかです。つまり、これは機能しません。 – mpen

関連する問題