2

私は jquery セレクターを (初めて) 拡張しようとしています。このプロジェクトで一緒に働いている友人のために、より読みやすく保守しやすいコードを取得しようとしています。

属性を持つすべての要素を見つけようとしていますdeletable=trueしたがって、次のようにfirebugでそれらの要素を探すと:

$('.wrapper[deletable="true"]')

正しい結果が得られます。

しかし、それを次のように短縮しようとすると:

$(':deletable')

だから私はこのようにjqueryセレクターを拡張しようとしました:

$.extend($.expr[':'], {
    deletable: function(el) {
      return $(el).find('[deletable="true"]').length > 0
    }
  });

何らかの理由で、firebug でhtml body mainContainer試してみると結果が得られます..削除可能な要素も取得しますが、body/html 要素のように必要のないこれらの余分な要素を取得します。$(":deletable")

私は何を間違っていますか?

4

4 に答える 4

1

カスタムセレクターが何をしているか見てみましょう:

return $(el).find('[deletable="true"]').length > 0

ここで、 を使用してカスタム セレクターを呼び出しています:deletable。これは と機能的に同等*:deletableです。これは、セレクターが次のことを行っていることを意味します。

$('*').find('[deletable="true"]').length > 0

bodyおよびを含む、属性を持つ要素を含むすべての要素を検索していますhtml

于 2013-09-06T15:28:06.653 に答える
0

を使用するfindと、セレクターに一致する子を持つすべての要素が true を返します。あなたはこれをやろうとしているようです

return $(el).is('[deletable="true"]');
于 2013-09-06T15:27:58.313 に答える
0

セレクターは、属性を持つ子を持つすべての要素を見つけていますdeletable="true"

代わりに、次のことができます。

$.extend($.expr[':'], {
    deletable: function(el) {
      return $(el).is('[deletable="true"]'); // Check if this element has the attribute
    }
  });

これは、属性を持つ要素のみを返します。

JSFiddle Example

于 2013-09-06T15:29:35.653 に答える