javascript - 字符串未定义并在控制台中执行(json 到 html)

标签 javascript json

我有以下代码用于创建一些简单的 JSON 数据,并将其迭代到我的页面的 HTML 中。

问题是此代码在没有加载函数的情况下返回'string'未定义错误

由于存在加载函数,它似乎只是被忽略并且根本不执行(没有错误),但是,当我将以下代码直接添加到浏览器控制台时,它执行得很好.

有什么想法吗?

window.addEventListener('load', function() {

    var json =[{
                "Name": "sample data",
                "Type": "lorem ip sum lorem sample",
                "DateModified": "6/14/2218 17:22:50",
                "Size": "2 KB",
            }, {
                "Name": "sample Q",
                "Type": "lorem ipsum",
                "DateModified": "5/11/2218 7:32:10",
                "Size": "6999 KB",
            }, {
                "Name": "sample x",
                "Type": "blah blah",
                "DateModified": "6/26/2218 10:29:59",
                "Size": "8999 KB",
            },
    ];

    var string ="";

    for (i in json) {
        string +='<div class="row"><div class="col-md-15 col-sm-1"><input type="checkbox" id="all" name="all" value="all"></div><div class="col-md-15 col-sm-4"><span class="folders">'+json[i].Name+'</span></div><div class="col-md-15 col-sm-3"><span class="directory">'+json[i].Type+'</span></div><div class="col-md-15 col-sm-3"><span class="date-stamp">'+json[i].DateModified+'</span></div><div class="col-md-15 col-sm-1"><span class="date-size">'+json[i].Size+'</span></div></div>';
    };
    document.getElementsByClassName('change').innerHTML =string

});

最佳答案

这里有一个问题

document.getElementsByClassName('change').innerHTML = string

getElementsByClassName返回一个类似数组的对象(HTMLCollection)并且需要一个索引,例如

document.getElementsByClassName('change')[0].innerHTML = string

如前所述,使用 for..in 循环数组并不好(它适用于对象),因此这里我使用 forEach,而不是 getElementsByClassName 我用过querySelector

堆栈片段

window.addEventListener('load', function() {

    var json =[{
                "Name": "sample data",
                "Type": "lorem ip sum lorem sample",
                "DateModified": "6/14/2218 17:22:50",
                "Size": "2 KB",
            }, {
                "Name": "sample Q",
                "Type": "lorem ipsum",
                "DateModified": "5/11/2218 7:32:10",
                "Size": "6999 KB",
            }, {
                "Name": "sample x",
                "Type": "blah blah",
                "DateModified": "6/26/2218 10:29:59",
                "Size": "8999 KB",
            },
    ];

    var string ="";

    json.forEach( function(item) {
        string +='<div class="row"><div class="col-md-15 col-sm-1"><input type="checkbox" id="all" name="all" value="all"></div><div class="col-md-15 col-sm-4"><span class="folders">'+item.Name+'</span></div><div class="col-md-15 col-sm-3"><span class="directory">'+item.Type+'</span></div><div class="col-md-15 col-sm-3"><span class="date-stamp">'+item.DateModified+'</span></div><div class="col-md-15 col-sm-1"><span class="date-size">'+item.Size+'</span></div></div>';
    });
    
    document.querySelector('.change').innerHTML = string

});
<div class="change"></div>

关于javascript - 字符串未定义并在控制台中执行(json 到 html),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51051780/

相关文章:

javascript - Jquery帮助加载Json数据

javascript - 两个对象数组的 typescript 差异

javascript - 如何禁用 asp 按钮上的回发并仍然运行 OnClick 方法?

java - vertx中eventBus的使用

javascript - 将动态嵌套 JSON 解析为 HTML 表

javascript - 如何将序列化的 JSON 字符串包装在 'single quotes' 中

通过 MySQL 的 Javascript DateTimePicker

javascript - 如何使用 JavaScript 按标题选择元素并更新它

json - 解析和生成 JSON

javascript - 如何使用 Regex 将两个双引号替换为一个双引号而不捕获一个双引号的出现?