質問

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

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

そして、それぞれの両親()?

役に立ちましたか?

解決

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

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

両親のために:

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

他のヒント

あなたの方法は実行時間の点で効率的だと思いますが、おそらくあなたが求めているのは構文砂糖です。そのためには、プラグインに包むことができます。

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

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

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

空想を得たい場合は、「検索」だけでなく、「親」や「子供」、その他のセレクターベースのプラグインに合わせて機能するプラグインを作成できます。

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

次に、最初の引数として、あなたが呼びたいトラバーサルプラグインを提供します。

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

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

  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')

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

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

「andself()」関数を調べます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top