1

jQueryがデータを保存する方法についてもっと理解しています。

これらのいずれかを実行することに利点はありますか?

$('#editCity').data('href', "xx");
var a = $('#editCity').data('href');

また

$('#editCity').attr('data-href', "xx");
var a = $('#editCity').attr('data-href');

もう1つの関連する質問。

私がこれを持っている場合:

var modal = { x: 'xx', y: 'yy' };

.data(..)を使用してこれを保存することもできますか?

4

3 に答える 3

1

データ関数の最も興味深い点は、など、あらゆる種類のオブジェクトを追加できることですmodalまた、ドキュメントに記載されているように、jQueryは、DOMが変更されたときにメモリリークを回避するように注意します。

jQuery.data()メソッドを使用すると、循環参照から安全であり、したがってメモリリークが発生しない方法で、任意のタイプのデータをDOM要素にアタッチできます。

文字列の場合、メモリリークは発生しませんが、主な違いは、最初のソリューションがよりクリーンで(アプリケーションの他の部分に文字列以外のデータを格納する場合はより一貫性があります)、より明確であり(意図が明らかです)、 t CSS計算を強制します(DOMは変更されません)。

于 2012-10-09T13:44:53.320 に答える
1

プロパティ値をDOM要素に直接格納することは、メモリリークの可能性があるため危険です。とにかくjQueryを使用している場合、この.data()メカニズムは要素ごとの情報を追跡するための素晴らしく安全な方法です。文字列だけでなく、任意のJavaScriptデータ構造を保存することもできます。

編集— HTMLマークアップにdata-foo属性が含まれている場合、キーにアクセスするとそれらが暗黙的に読み取られます。つまり、HTMLが次のようになっている場合:

<div id="div1" data-purpose="container">

次に、jQueryで:

alert( $('#div1').data('purpose') ); // alerts "container"

さらに、jQueryは属性値の「スマート」分析も行います。値が数値のように見える場合、jQueryは文字列ではなく数値を返します。JSONのように見える場合は、JSONを逆シリアル化します。

編集—ここに良いトリックがあります:Chrome開発者コンソール(「コンソール」ビュー)で、JavaScript式を入力してそれらを評価させることができます。評価は常に、作業中のページのコンテキストで行われます。[要素]ビューから要素を選択すると、コンソールでJavaScriptシンボル$0がその選択されたDOM要素を参照します。したがって、コンソールに移動して次のように入力することで、要素の「データ」マップをいつでも調べることができます。

$($0).data("something");

この.data()関数は、パラメーターなしで呼び出された場合、すべてのキーと値のペアを返します。

$($0).data();
于 2012-10-09T13:45:24.107 に答える
0

どちらにも利点があります...とはいえ、99%の時間は使用する必要があります.data('whatever', value)

使用の利点.data('whatever', value)

  • DOMを使用していないため、メモリリークが発生しにくくなります。
  • DOMからよりもメモリからデータをプルする方がわずかに高速です。
  • 最初にJSONにシリアル化せずに、任意のタイプのオブジェクトをその中に入れることができます。

使用の利点.attr('data-whatever', value)

  • と互換性があります.data('whatever')
  • 次の値で要素を選択できます。$('[data-whatever=foo]')
  • 任意のオブジェクトを入れることができますが、複合型の場合はシリアル化する必要があります。
于 2012-10-09T13:51:02.740 に答える