2011-08-16 11 views
2

jQueryの.data()関数は、真の読み書き記憶域ではなく、ライトワンスストアの機能です。jQueryの.data()に格納された「複雑な」データを更新するには?

複雑な値を快適に更新する方法はありません。

二重リンクリストでいくつかの要素を使用したいとしましょう(私の使用例ではなく、説明目的のみ)。

私がどうなるかどうかは簡単だろう:

$elem.data('prev', $prev); 
$elem.data('next', $next); 

しかし、私は要素の「グローバル」.data()名前空間を汚染する悪い習慣であると感じています。

だから私はむしろ、どうなる:

$elem.data('list', {prev: $prev, next: $next}); 

しかし、どのように、私は今prevを更新していますか?最初の例で

、私はどうなる:

$elem.data('prev', $newPrev); 

しかし、物事の私の意見では、「よりよい」方法で、私は考えることができる唯一のことは、このようなものです:

$elem.data('list', {prev: $newPrev, next: $elem.data('list').next}); 

これはもっと厄介なようですが、もっと良い方法があると思われますが、これまで何も見つかりませんでした。

どうすればよいですか?

+0

データ( '次'、..)データ( 'prev'、..)を使用する際の問題は何ですか?要素ごとではなく、グローバルではありません –

答えて

4

使用すると、1つの引数でjQueryのデータメソッドを呼び出すと、あなたはあなたが定期的に.記法使用して直接更新することができます格納されたオブジェクトへの参照を取得:このように

+0

3行目は不要です – balpha

+0

@おかげで!私の答えを更新しました。 –

1

@balpha

$elem.data('list').prev = $newPrev; 

感謝を。

// method one 
var elemData = $elem.data("list"); 
elemData.prev = "foo"; 

// method two 
$elem.data("list").next = "bar"; 

あなたは放火犯を持っている場合は、herehere(出力がログインしているデモを確認することができます コンソール)。

関連する問題