2009-09-09 7 views
75

JavaScriptオブジェクトをHTML要素に関連付ける必要があります。これを行う簡単な方法はありますか?JavaScriptオブジェクトをHTML要素に貼り付ける良い方法はありますか?

私は気付きましたHTML DOMはsetAttributeメソッドを定義しており、これは任意の属性名に対して定義されているようです。ただし、これは文字列の値のみを設定できます。 (もちろん、辞書にキーを格納するためにこれを使用することができます。)

細目(私は一般的な問題のほとんどは興味が):

具体的には、私は、ツリー内のノードを表すHTML要素を持っていますドラッグ・アンド・ドロップを有効にしようとしていますが、jQueryドロップ・イベントでは、ドラッグ・アンド・ドロップされている要素のみが表示されます。

イベントハンドラに情報を渡すための通常のパターンは、JavaScriptオブジェクトを作成するのと同時にHTML要素を作成してから、これらのJavaScriptオブジェクトを閉じることでイベントハンドラを定義することですこの場合、あまりにもうまくいきます(ドラッグが開始されたときにグローバルオブジェクトが作成される可能性がありますが、これはやや厄介です)。

答えて

35

jQuery data()の方法を見ましたか?必要に応じて複雑なオブジェクトを要素に割り当てることができます。または、そのメソッドを利用してオブジェクト(または他のデータ)への参照を少なくとも保持することができます。

+7

ありがとうございます:これは私が探していたものです。 興味深いことに、このメソッドを定義するために、jqueryは各要素の文字列属性でキーをグローバル辞書に格納します。この文字列属性の名前は、jqueryが最初にロードされるときにランダムに生成されます。 (DOMを使ってのみこれを行うより良い方法はないと言っている) – user47741

+3

jQueryの 'data()' *は、[answer bobince give ](http://stackoverflow.com/a/1402782/42921)jqueryをまだ使用していない場合は、それを使うこともできます。 –

+4

6年後にこの答えを振り返ってみると、「これは非常に最適ではない回答です。 –

79

JavaScriptオブジェクトには任意のプロパティを割り当てることができますが、それを許可するために特別なことは何もありません。これにはDOM要素が含まれます。この動作はDOM標準の一部ではありませんが、JavaScriptの最初のバージョンに戻ってきており、完全に信頼できます。

var div= document.getElementById('nav'); 
div.potato= ['lemons', 3]; 
+3

@ tat.wright - 彼が話しているHTML要素の任意のプロパティはExpandoプロパティと呼ばれます。また、div.potatoはdiv.getAttribute( "potato")を意味しないことに注意してください。 – nickytonline

+2

全く信頼できるわけではありません。たとえば、IEで 'document.expando = false'を1回呼び出すと、ドキュメント内のHTML要素のすべての展開プロパティが無効になります。 –

+33

@Tim Down:しないでください。私はなぜそれが信頼できないのか見当たりません - あなたはnullに設定できるので、Stringオブジェクトは信頼できないと言っているようです。 – simon

関連する問題