13

多数の div に複数 (10 以上) の値を格納する場合、それらをすべて単一のオブジェクトに格納するのと、個別の値として格納するのとではどちらが最適ですか?

単一のオブジェクト:

$("#div_id").data("data", {foo:1, bar:2});

個別の値:

$("#div_id")
  .data("foo", 1)
  .data("bar", 2);

各方法のトレードオフは何ですか? これらの属性の一部は頻繁にアクセスされます (たとえば、ドラッグなどのイベント コールバック中)。

4

3 に答える 3

13

1.4では、これを行うことができます。

$('#somediv').data({ one : 1, two : 2, three : 3 });

これは、データオブジェクトを初期化するための優れた方法です。ただし、1.4.2では、このフォームを使用すると、この要素の既存のデータがすべて置き換えられることに注意してください。したがって、これを試してみると:

$('#somediv').data( 'one', 1 );

$('#somediv').data({ two : 2, three : 3 });

'one'の値を吹き飛ばします。

(個人的には、jQueryはすでにオブジェクトと$ .extendのマージを多用しているので、残念だと思います。なぜそれがここで使用されなかったのかはわかりません。)

更新(ユーザーからの提案:@ ricka、ありがとうございます):

1.4.3以降、データをマージします(http://api.jquery.com/data/#data-obj):

jQuery 1.4.3では、要素のデータオブジェクトを.data(obj)で設定すると、その要素で以前に保存されたデータが拡張されます。jQuery自体は.data()メソッドを使用して、「events」および「handle」という名前で情報を保存し、内部使用のためにアンダースコア(「_」)で始まるデータ名も予約します。

jQuery 1.4.3より前(jQuery 1.4以降)では、.data()メソッドは、データオブジェクトを拡張するだけでなく、すべてのデータを完全に置き換えました。サードパーティのプラグインを使用している場合、プラグインもデータを設定している可能性があるため、要素のデータオブジェクトを完全に置き換えることはお勧めできません。

于 2010-09-14T16:52:01.570 に答える
6

どちらのアプローチもコードで簡単に使用できる場合は、単一のオブジェクトを格納します。data()値が必要になるたびにメソッドを呼び出す余分なオーバーヘッドが回避されます。このように、 を 1 回呼び出すだけでマッピング オブジェクトをフェッチし、再度data()呼び出すことなく、このオブジェクトから何度でも値を取得できますdata()

このdata()メソッドは、内部でオブジェクトを使用して要素をキー/値にマップするため、マッピング オブジェクトを自分で管理するよりもパフォーマンスが向上することはありません。

于 2009-06-02T23:24:55.943 に答える