2015-02-17 149 views
0

我想遍历一个JSON对象,并在li标记中包装数组中的每个项目。试图迭代

这里是我的JSON结构

var classYear = { 
    "1921": [ 
     'name1', 'name2', 'name3', 'name4' 
    ], 
    "1933": [ 
     'name5', 'name6', 'name7', 'name8' 
    ], 
    "1943": [ 
     'name9', 'name10', 'name11', 'name12', 'name13' 
    ] 
}; 

这里是我的javascript

var container = document.getElementById('classYearContainer'); 

function classYearOutput(yClass, yId, listId, key, name) { 
    return '<div class="'+ yClass +'" id="'+ yId +'">' + 
     '<h4>' + key + '</h4>' + 
     '<ul id="'+ listId +'">' + name + '</ul>' + 
     '</div>'; 
} 

function nameList(name) { 
    return '<li>' + name + '</li>'; 
} 

for(var year in classYear) { 
    container.innerHTML += classYearOutput(
     'category', 
      'y-' + year, 
     year + '-list', 
     year, 
      nameList(classYear[year]) 
); 
} 

有了这个设置我的输出返回所有的名字在一个li而非独立li标签。奇怪的是,当我console.log我得到了预期的结果,但当我return它把所有的名字在同一li

感谢您的任何帮助。

+0

建议使用'createElement'和'appendChild'。字符串容易出错。 – elclanrs 2015-02-17 23:29:41

回答

0

问题是你将数组传递给名称列表,你需要遍历数组并为每个数组创建一个li 名称。

function nameList(names) { 
    var out = ""; 
    names.forEach(function (el) {out += "<li>" + el + "</li>";}); 
    return out; 
} 

小提琴:http://jsfiddle.net/noy3dshx/

+0

就是这样。非常感谢你的支持。 – jmac 2015-02-18 04:12:18

+0

如果你认为答案是正确的,你应该接受它作为正确的答案,详情请看这里:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work。 – ShaneQful 2015-02-18 19:38:08

1

是一个数组,你将它传递给nameList函数。

你必须在功能迭代以及

function nameList(name) { 

    var html = ''; 

    for (var i=0; i<name.length; i++) { 
     html += '<li>' + name[i] + '</li>'; 
    } 

    return html; 
} 
+0

有道理...感谢您的回答 – jmac 2015-02-18 04:12:58

0
function nameList(names) { 
    return names.map(function(name) { 
     return '<li>' + name + '</li>'; 
    }); 
} 

名称是一个数组,所以你需要遍历这不是你基本上是调用数组的toString方法,它是做什么的最好给你一个逗号分隔的内容列表(例如console.log(['a', 'b', 'c'].toString());console.log('' + ['a', 'b', 'c']);

+0

感谢您的解释。 – jmac 2015-02-18 04:17:05