0

.data()を使用してデータ属性を設定すると、jquery 属性セレクターを使用して要素を検索できないことを発見しましたが、を使用して設定すると.attr()、検索が機能します。

私のクロムコンソールからの出力:

$('body').append($('<div></div>').data('x', 'y'));
[<body>​…​&lt;/body>​]
$('div[data-x="y"]')
[]
$('body').append($('<div></div>').attr('data-x', 'y'));
[<body>​…​&lt;/body>​]
$('div[data-x="y"]')
[<div data-x=​"y">​&lt;/div>​]

私の質問は、.attr() を使用する場合、すべてのブラウザーで正しく動作すると仮定して保存するかどうかです。

4

2 に答える 2

2

正しく動作しますがdata()、ゲッターとセッターとして使用する必要があります。

これは、jQuerydata-*がメモリ内に保持するオブジェクトにすべての属性を格納するためです。これは、毎回 DOM にアクセスして属性を読み書きするよりもはるかに高速であることを意味します。

データ属性で要素を選択する必要がある場合は、filter()- を使用してください。まだテストしていませんが、属性セレクターよりも高速です。

var $filteredElements = $('.lots-of-elements').filter(function() {
    return $(this).data('foo') == 'bar';
});
于 2013-08-17T15:28:52.900 に答える