[解決済み] javascript / jQueryを使用してdata-*属性のリストを取得します。
質問
任意のHTML要素に0個以上の
data-*
属性を持つデータのキーと値のペアのリストを取得するには、どうすればよいのでしょうか。
例)このように与えられた。
<div id='prod' data-id='10' data-cat='toy' data-cid='42'>blah</div>
これをプログラムで取得できるようにしたい。
{ "id":10, "cat":"toy", "cid":42 }
jQuery (v1.4.3) を使って、個々のデータにアクセスするには
$.data()
は、キーがあらかじめ分かっていれば簡単ですが、任意のデータセットでどのようにできるかは明らかではありません。
もしあれば、「シンプルな」jQueryの解決策を探していますが、そうでなければ、より低レベルのアプローチでも構わないと思っています。をパースすることを試みました。
$('#prod').attributes
しかし、私のjavascriptの力のなさに失望しています。
更新
カスタムデータ は、私が必要とするものを提供してくれます。しかし、ほんの一部の機能のためにjQueryプラグインを含めるのはやりすぎのように思えました。
ソースを見ることで、自分のコードを修正することができました(javascriptの腕も上がりました)。
私が思いついた解決策は、こんな感じです。
function getDataAttributes(node) {
var d = {},
re_dataAttr = /^data\-(.+)$/;
$.each(node.get(0).attributes, function(index, attr) {
if (re_dataAttr.test(attr.nodeName)) {
var key = attr.nodeName.match(re_dataAttr)[1];
d[key] = attr.nodeValue;
}
});
return d;
}
アップデート2
受理された回答で示されたように、jQuery (>=1.4.4) を使えば、解決は簡単です。
$('#prod').data()
は、必要なデータのディクショ ンを返します。
解決方法は?
実は、jQueryを使用している場合、バージョンとして
1.4.3
1.4.4(下のコメントにあるようなバグがあるため)。
data-*
属性は
.data()
:
jQuery 1.4.3時点 HTML 5
data-
属性は自動的に jQueryのデータオブジェクトに引き込まれます。文字列はそのままであることに注意してください 一方、JavaScriptの値は を関連する値に変換します(これは これには、ブール値、数値、オブジェクトが含まれます。 配列、NULL)。また
data-
属性は最初の データプロパティがアクセスされたとき、そして その後、アクセスや変異が行われることはありません。 (すべてのデータ値はその後 jQueryの内部で)。
は
jQuery.fn.data
関数は、すべての
data-
属性はキーと値のペアで、キーは属性名で
data-
であり、値は上記のルールに従って変換された後の属性値である。
また、簡単なデモも作ってみましたので、これで納得していただけない方はご覧ください。 http://jsfiddle.net/yijiang/WVfSg/
関連
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] JavaScriptで現在の日付を取得するには?
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?
-
[解決済み] jQueryを使ってドロップダウンリスト(セレクトボックス)から選択されたテキストを取得する
-
[解決済み] JavaScriptでドロップダウンリストの選択値を取得する
-
[解決済み] jQueryで現在のURLを取得する?
-
[解決済み] jQueryを使ったAjaxリクエストの中断
-
[解決済み] jQueryでフォームデータをJavaScriptオブジェクトに変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
Vueの要素ツリーコントロールに破線を追加する説明
-
Vue+ElementUIによる大規模なフォームの処理例
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
vueの補間表現とv-textディレクティブの違いについて
-
[解決済み】GETできない / Nodejsエラー
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
HTML5 LocalStorage ローカルストレージとセッションストレージの使用法
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR