jquery - 多个 DIV 作为 json 字符串存入 localStorage

标签 jquery json local-storage

我有一些(可能超过2个)类似的DIV的html:

<div class="article">
<img id="img" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/51/IBM_logo.svg/400px-IBM_logo.svg.png" />
<div class="text2ls">IBM</div>
</div>
<hr/>
<div class="article">
<img id="img" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Microsoft_logo_%282012%29.svg/440px-Microsoft_logo_%282012%29.svg.png" />
<div class="text2ls">Microsoft</div>
</div>

并希望将它们作为 JSON 字符串添加到 localStorage 中。这是我的 jQuery:

$('.article').each(function () {
var imageUrl = $(this).find('img[id=img]').attr('src');
convertImgToBase64(imageUrl, function (base64Img) {
    localStorage.setItem('elephant', base64Img);
    var picture = localStorage.getItem('elephant');
    lsengine(picture);
});
});
function lsengine(pic) {
var copy = $('.text2ls').html();
var article = {
    "text": copy,
        "image": pic
};
localStorage.setItem('articles', JSON.stringify(article));
localStorage.removeItem('elephant');
}

但由于某些原因它只添加了一个DIV的内容。你能帮我解决我做错的事情吗?

请玩我的jsfiddle:http://jsfiddle.net/5eq3koco/2/

最佳答案

您在 $.each 循环的每次迭代中调用 localStorage.setItem('articles', JSON.stringify(article));。您可以做的是使用一个全局数组来存储每个文章对象并在循环结束后将其字符串化。与此类似的东西:

var articles = [];
$('.article').each(function () {
    var imageUrl = $(this).find('img[id=img]').attr('src');
    convertImgToBase64(imageUrl, function (base64Img) {
        localStorage.setItem('elephant', base64Img);
        var picture = localStorage.getItem('elephant');
        lsengine(picture);
    });
});
function lsengine(pic) {
    var copy = $('.text2ls').html();
    articles.push({
        "text": copy,
        "image": pic
    });
}

localStorage.setItem('articles', JSON.stringify(articles));
localStorage.removeItem('elephant');

编辑 fiddle 演示中遇到的第二个问题是 stringify 函数立即发生,而触发写入 localStorage 的 img.onload 是异步发生的。看看这个:https://jsfiddle.net/limdauto/5eq3koco/8/

关于jquery - 多个 DIV 作为 json 字符串存入 localStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29833881/

相关文章:

javascript - 从特定位置将 div 转换为 fadeIn()

json - 使用 jq 将数字字节值数组转换为字符串

android - JSON解析问题——如何在一段代码中同时处理JSONArray和JSONObject

javascript - 通过本地存储检查值

javascript - 如何删除选定的元素 react

javascript - jQuery ui 可排序嵌套排序中不准确的占位符放置

javascript - 页面滚动时将 Div 元素从一个移动到另一个

javascript - jQuery 适用于第二个事件,但不适用于第一个事件

java - 获取 JSON 弹出窗口以保存或打开对话框而不是实际内容?

javascript - 无法正确获取localStorage中存储的数据