35

matchedset.find(selector)/を使用matchedset.parents(selector)して、セレクターによってフィルター処理された現在の一致セットの子孫/祖先を取得できますが、一致セット自体は含まれません(セレクターと一致する場合もあります)。それを取得するためのより良い(より簡潔および/またはより速い)方法はありますか?

matchedset.find(selector).add(matchedset.filter(selector))

とそれぞれの親()?

4

5 に答える 5

45

あなたはこれを行うことができます:

matchedset.find('*').andSelf().filter(selector);

親の場合:

matchedset.parents('*').andSelf().filter(selector);
于 2010-03-24T16:14:35.530 に答える
17

あなたのメソッドは実行時間の点で効率的だと思いますが、おそらくあなたが求めているのは糖衣構文です。そのために、プラグインにラップすることができます:

  jQuery.fn.findAndSelf = function(selector) {
    return this.find(selector).add(this.filter(selector))
  }

次に、次のように使用します。

$('.whatever').findAndSelf('.awesome')

ファンシーになりたい場合は、「find」だけでなく「parents」と「children」およびその他のセレクターベースのプラグインでも機能するプラグインを作成できます。

  jQuery.fn.withSelf = function(plugin, selector) {
    return this[plugin](selector).add(this.filter(selector))
  }

次に、最初の引数として、呼び出したいトラバーサルプラグインを指定します。

$('.whatever').withSelf('find', '.awesome')
$('.whatever').withSelf('parents', '.awesome')

キックのためだけに、任意の数のトラバーサルプラグインを一度に呼び出すことができるもう1つの楽しいプラグイン:

  jQuery.fn.traverse = function(plugins, selector) {
    var set = new jQuery();
    $.each(plugins, function(i, val) {
      set.add(this[val](selector));
    }
    return set
  }

次のように、セレクターベースのプラグインの任意の組み合わせでこれを呼び出すことができます。

$('.whatever').traverse(['find','filter'], '.awesome')
$('.whatever').traverse(['parents','find'], '.awesome')
$('.whatever').traverse(['parents', 'filter'], '.awesome')
于 2010-09-18T14:19:57.083 に答える
2

Jeoffのソリューションは優れていますが、セレクターなしでそれ自体を含むすべての要素を反復できることが優れている場合があります。このアドオンはもう少し柔軟性があります。

$.fn.all = function(selector) {
    if(selector===window.undefined) return this.find('*').andSelf();
    return this.filter(selector).add(this.find(selector));
};
于 2013-02-08T22:32:03.307 に答える
0

「andSelf()」関数を検索します。

于 2010-03-24T14:39:03.523 に答える
0

あなたが持っている親のためにclosest(selector)

于 2013-03-17T13:47:50.167 に答える