我just learned about jquery's .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 '[]'
关于我做错了什么的想法?
答案 0 :(得分:3)
links
包含循环引用,因此无法将其序列化为JSON。 Chrome 5.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);
答案 1 :(得分:0)
$('a')
选择页面上的所有链接(HTMLAnchorElement
s)。
元素是由它们在文档中的标识和存在定义的DOM节点。它们不是JSON可以表示的简单值。如果你看一下JSON.stringify()
为它们返回的内容,它只是{}
:JSON说它所知道的对象就是它Object
。
尝试将节点置于localStorage
之内没有任何意义;当你明天阅读存储时,你期望什么回来?一个Node对象,它是用户昨天关闭和销毁的文档的一部分?
如果你想记住链接指向的位置,你应该从他们的href
属性中获取String
- 一个简单的值类型,localStorage
可以安全地记住它