私はHTML5に付属するこれらのデータ属性にどのセレクターが利用可能か知りたいのですが。
例としてこのHTMLを取ります。
<ul data-group="Companies">
<li data-company="Microsoft"></li>
<li data-company="Google"></li>
<li data-company ="Facebook"></li>
</ul>
取得するセレクターはありますか。
data-company="Microsoft"
の下に"Companies"
を持つすべての要素data-company!="Microsoft"
の下に"Companies"
を持つすべての要素$("ul[data-group='Companies'] li[data-company='Microsoft']") //Get all elements with data-company="Microsoft" below "Companies"
$("ul[data-group='Companies'] li:not([data-company='Microsoft'])") //get all elements with data-company!="Microsoft" below "Companies"
jQueryセレクタ :に含まれるのはセレクタです
これは に関する情報です:セレクタを含む
jQuery UI
には :data()
セレクタ があり、これも使用できます。それは バージョン1.7.0 から始まったようです。
あなたはこのようにそれを使うことができます:
data-company
属性を持つすべての要素を取得する
var companyElements = $("ul:data(group) li:data(company)");
data-company
がMicrosoft
に等しいすべての要素を取得
var Microsoft = $("ul:data(group) li:data(company)")
.filter(function () {
return $(this).data("company") == "Microsoft";
});
data-company
がMicrosoft
と等しくないすべての要素を取得する
var notMicrosoft = $("ul:data(group) li:data(company)")
.filter(function () {
return $(this).data("company") != "Microsoft";
});
etc ...
新しい:data()
セレクタの注意点の1つは、選択するにはdata
value by codeを設定する必要があることです。これは、上記が機能するためには、HTMLでdata
を定義するだけでは不十分であることを意味します。あなたは最初にこれをしなければなりません:
$("li").first().data("company", "Microsoft");
これは、$(...).data("datakey", "value")
をこのような方法で使用する可能性が高い単一ページのアプリケーションに適しています。
jQueryは、あなたが探しているクエリを機能させるために、いくつかの セレクタ(全リスト) を提供します。あなたの質問に答えるために{"他の場合には"含む、より小さい、より大きいなどのような他のセレクターを使うことが可能です。 "を使うこともできます。これらのhtml5データ属性を見てください。あなたの選択のすべてを見るために上の完全なリストを見なさい。
基本的な問い合わせは上でカバーされました、そして John Hartsock s answer を使用することはすべてのdata-company要素を得るために、またはマイクロソフト以外のすべてを得るために最善の策です。 :not
のバージョン.
これをあなたが探している他のポイントに拡張するために、私たちはいくつかのメタセレクターを使うことができます。まず、複数のクエリを実行する予定がある場合は、親の選択をキャッシュするのがいいでしょう。
var group = $('ul[data-group="Companies"]');
次に、このセットでGで始まる企業を探すことができます。
var google = $('[data-company^="G"]',group);//google
それともWordというソフトを含む会社
var Microsoft = $('[data-company*="soft"]',group);//Microsoft
データ属性の終了が一致する要素を取得することも可能です。
var facebook = $('[data-company$="book"]',group);//facebook
//stored selector
var group = $('ul[data-group="Companies"]');
//data-company starts with G
var google = $('[data-company^="G"]',group).css('color','green');
//data-company contains soft
var Microsoft = $('[data-company*="soft"]',group).css('color','blue');
//data-company ends with book
var facebook = $('[data-company$="book"]',group).css('color','pink');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul data-group="Companies">
<li data-company="Microsoft">Microsoft</li>
<li data-company="Google">Google</li>
<li data-company ="Facebook">Facebook</li>
</ul>
Pure/Vanilla JSソリューション (作業例 ここ )
// All elements with data-company="Microsoft" below "Companies"
let a = document.querySelectorAll("[data-group='Companies'] [data-company='Microsoft']");
// All elements with data-company!="Microsoft" below "Companies"
let b = document.querySelectorAll("[data-group='Companies'] :not([data-company='Microsoft'])");
querySelectorAll で有効な CSSセレクタを使用する必要があります (現在は Level3 )
jQueryおよびPure JSの場合、 SPEED TEST (2018.06.29):Chrome 67.0.3396.99(64ビット)、Safari 11.0.3(13604.5.6)上のMacOs High Sierra 10.13.3でテストが行われましたFirefox 59.0.2(64ビット)下のスクリーンショットは最速ブラウザ(Safari)の結果を示しています。
PureJSは、jQueryよりもChromeで12%、Firefoxで21%、Safariで25%高速でした。興味深いことに、Chromeの速度は1秒あたり18.9M、Firefox 26M、Safari 160.9M(!)でした。
だから勝者はPureJSです そして最速のブラウザは Safari (Chromeより8倍以上速い!)
ここであなたはあなたのマシンでテストを実行することができます: https://jsperf.com/js-selectors-x