3

jqueryの.makeArrayについて学び、 JSON.stringifyを使用して配列をlocalStorageに格納しようとしていますが、予期しない結果が発生しています。

これは機能します:

var links = {'one': 1, 'two': 2 };
var setstr = JSON.stringify(links);

localStorage.setItem('strlinks', setstr);
var getstr = localStorage.getItem('strlinks');
console.log(getstr); //Returns what's expected - '{"one":1, "two":2}'

これはしません:

var links = $.makeArray($('a'));

alert(links); //Returns list of links
var setstr = JSON.stringify(links);

localStorage.setItem('strlinks', setstr);
var getstr = localStorage.getItem('strlinks');
console.log(getstr); //Returns '[]'

私が間違っていることについて何か考えはありますか?

4

2 に答える 2

3

links循環参照が含まれているため、JSONにシリアル化することはできません。Chrome5.0.375.99では次のエラーが発生します。

TypeError: Converting circular structure to JSON

どういうわけかこれらの循環参照を削除する必要があります。もちろん、それはあなたが気にする情報に依存します。簡略化したバージョンは次のとおりです。

var flatLinks = $.map(links, function(el)
                             {
                              return {href: el.href, text: el.textContent};
                             }); 
var setstr = JSON.stringify(flatLinks);
于 2010-07-27T23:48:12.273 に答える
0

$('a')ページ上のすべてのリンク(HTMLAnchorElements)を選択します。

要素は、ドキュメント内でのIDと存在によって定義されるDOMノードです。これらは、JSONが表すことができる単純な値ではありません。JSON.stringify()それらに何が返されるかを見ると、それはただのことです{}:JSONは、オブジェクトについて知っているのは、それがであるということだけだと言っていますObject

localStorageノードを;の中に入れようとしても意味がありません。明日ストレージを読んだときに何が戻ってくると思いますか?ユーザーが昨日閉じて破棄したドキュメントの一部であったNodeオブジェクト?

リンクが指している場所を覚えておきたい場合は、hrefプロパティからそれを取得する必要があります。Stringこれは、によって安全に覚えられる単純な値型ですlocalStorage

于 2010-07-27T23:48:26.373 に答える