要素のオブジェクトに格納されている値に基づいて要素を選択する必要があります.data()
。少なくとも、次のようにセレクターを使用して最上位レベルのデータ プロパティを選択したいと思います。
$('a').data("category","music");
$('a:data(category=music)');
あるいは、セレクターは通常の属性セレクター形式になります。
$('a[category=music]');
または、属性形式ですが、次の形式であることを示す指定子を使用します.data()
。
$('a[:category=music]');
私は見つけたジェームズ・パドルシーの実装シンプルでありながら見栄えが良い。上記のセレクター形式は、そのページに示されているメソッドを反映しています。シズルパッチ。
どういうわけか、jQuery 1.4 には jquery.data()
オブジェクトの値に対するセレクターのサポートが含まれると以前読んだことを覚えています。しかし、今探しても見つかりません。おそらく、私が見たのは機能リクエストだけだったのでしょう。これはサポートされていて、私が見ていないだけなのでしょうか?
理想的には、ドット表記を使用して data() のサブプロパティをサポートしたいと思います。次のようになります。
$('a').data("user",{name: {first:"Tom",last:"Smith"},username: "tomsmith"});
$('a[:user.name.first=Tom]');
また、複数のデータ セレクタもサポートし、指定されたすべてのデータ セレクタを持つ要素のみが見つかるようにしたいと考えています。通常の jQuery の複数セレクタは OR 演算を行います。たとえば、クラスまたは のいずれかを持つタグ$('a.big, a.small')
を選択します。次のような AND を探しています。a
big
small
$('a').data("artist",{id: 3281, name: "Madonna"});
$('a').data("category","music");
$('a[:category=music && :artist.name=Madonna]');
最後に、データ セレクターで比較演算子と正規表現の機能が使用できればすばらしいと思います。 は$(a[:artist.id>5000])
可能です。 を使用すれば、おそらくその大部分を実行できると思いますfilter()
が、セレクターの形式がシンプルであれば便利です。
これを実現するためのソリューションにはどのようなものがありますか? 現時点では、Jame の Padolsey が最善のソリューションでしょうか? 私の懸念は主にパフォーマンスに関するものですが、サブプロパティのドット表記や複数のデータ セレクターなどの追加機能についてもです。これらをサポートしたり、何らかの点でより優れた実装は他にもありますか?
ベストアンサー1
現時点では次のように選択しています:
$('a[data-attribute=true]')
これは問題なく動作するようですが、jQuery が 'data-' プレフィックスなしでその属性を選択できれば便利です。
私はこれを、jQuery を介して要素に動的に追加されたデータでテストしていないので、それがこの方法の欠点である可能性があります。