最近、私はコーディングしていましたが、奇妙な問題に遭遇しました。 (jQueryを介して)作成した新しい要素にデータ属性を割り当てようとしましたが、実際には属性が割り当てられないことがわかりました。例については、以下のリンクを参照してください。コードは以下のとおりです。
http://jsfiddle.net/y95p100c/1/
なぜこれが起こっているのでしょうか?私はこれにつまずいたことがありません...
var div = $("<div />")
$(div).data("foo", "bar")
console.log($(div)[0].outerHTML) // prints <div></div>
data
は、set_data-*
_属性を設定しません。 _data-*
_属性とは無関係のデータキャッシュを管理します。存在する場合は_data-*
_属性からinitializesしますが、決して書き込みません。属性に書き込むには、attr
を使用します。
例: 更新されたフィドル
_var div = $("<div />")
$(div).attr("data-foo", "bar")
console.log($(div)[0].outerHTML)
_
あなたが見ているものは、これが驚くべき多くの方法のうちの1つにすぎません。もう1つは、マークアップが_<div id="Elm" data-foo="bar"></div>
_であり、ある時点で$("#Elm").data("foo")
を使用して値を取得する場合(そして実際に_"bar"
_になる場合)、$("#Elm").data("foo", "update")
、属性は_data-foo="bar"
_のままですが、data
で管理されるデータは_"update"
_に等しいfoo
になりました。しかし、上記のルールはそれを説明しています:data
neverwritesto _data-*
_ attrs。
jQueryはdata-
属性は、要素がロードされたときに属性になりますが、その後はアクセスしません。要素はjQuery内部構造に格納されます。 API から:
data-
属性は、データプロパティへの最初のアクセス時に取得され、その後アクセスまたは変更されなくなります(すべてのデータ値はjQueryに内部的に格納されます)。