2012-09-07 11 views
13

jQuery 1.7.2が私のためにDOMデータ属性を更新していないようです。次のマークアップを考える:以下のJavaScriptを実行jQuery .data()DOMを更新していません

<ul id="foo"> 
    <li data-my-key="12345">ABCDEF</li> 
</ul> 

、私は期待していないよいくつかの結果を得る:さらなる調査の際

$('#foo li:first').data('my-key') // Returns 12345 - Expected 
$('#foo li[data-my-key="12345"]') // Returns the expected <li> 
$('#foo li:first').data('my-key', '54321') 
$('#foo li:first').data('my-key') // Returns 54321 - Expected 
$('#foo li[data-my-key="54321"]') // Returns an empty array - Not expected 

を、私はDOMを設定した後に変更されていないた気づきました.data()関数を使った新しい値(Chrome 21.0.1180.81、Firebug 1.10.3、Firefox 14.0.1の "Inspect Element"で検証済み)。

私の将来性は予期せぬものですが、これはjQueryデータが機能するための意図した方法ですか?もしそうなら、jQueryでdata- *属性を更新する適切な方法は何ですか?単にattr()関数を使用しますか?

+6

のhttp:/ /stackoverflow.com/questions/12271362/writing-in-a-new-attribute-and-making-it-active-in-jquery-1-7-using-document/12271393#12271393 –

+2

@JosephSilber ehhh私は本当にしないそこにあなたの答えが... – Neal

+1

@Neal - ehhh ... OK。どうして? –

答えて

6

$('#foo li[data-my-key="54321"]')は、属性セレクタである。

.data(..)を使用すると、フィルタを使用せずに選択できないのプロパティが変更されます。あなたはこれを行うことができ、特定のプロパティを持つすべての要素を取得したい場合は

filter(...)を使用して):

$('#foo li').filter(function(index) { 
    return $(this).data('my-key') === 54321; 
}); //returns all `#foo li` with data[my-key] === 54321 

の詳細はこちらをご覧ください:.prop() vs .attr()

+0

なぜprop()は直接ですか? –

+0

@DanielRuf 'prop'は何をするのですか? – Neal

+0

要素(.attr()と同じ構文)http://api.jquery.com/prop/フィルタが必要ですか? –

関連する問題