var div = document.getElementsByClassName('news-story')[0],
h5 = div.getElementsByTagName('h5'),
p = div.getElementsByTagName('p'),
data = JSON.parse( my_JSON_data );
data.items.forEach(function(v,i) {
h5[i].innerHTML = v.title;
p[i].innerHTML = "By: " + v.author;
});
JSFIDDLE DEMO
如果需要支持旧版浏览器,可以使用典型的for 语句代替forEach 方法。
for( var i = 0; i < data.items.length; ++i ) {
var v = data.items[i];
h5[i].innerHTML = v.title;
p[i].innerHTML = "By: " + v.author;
}
我建议为 news-story 元素使用 ID 而不是类,因此您可以使用 getElementById 代替 (当然,除非您有多个)。 p>
如果这不可能,您可能需要使用兼容函数from MDN 来替换getElementsByClassName。
如果您需要创建内部元素,那么这是一种方法:
var div = document.getElementsByClassName('news-story')[0],
data = JSON.parse( my_JSON_data ),
html;
html = data.items.map(function(v,i) {
return '<h5>' + v.title + '</h5>' +
'<p>By: ' + v.author + '</p>';
}).join('');
div.innerHTML = html;
JSFIDDLE DEMO
@Xeon06 在他的回答中展示了如何使用createElement(),这可以说是一种更好的方法。
我会这样做:
var div = document.getElementsByClassName('news-story')[0],
frag = document.createDocumentFragment(),
data = JSON.parse( my_JSON_data );
data.items.forEach(function(v,i) {
frag.appendChild( document.createElement('h5') ).innerHTML = v.title;
frag.appendChild( document.createElement('p') ).innerHTML = "By: " + v.author;
});
div.appendChild( frag );
JSFIDDLE DEMO
当然,您可以修改它以使用 for 语句代替:
var div = document.getElementsByClassName('news-story')[0],
frag = document.createDocumentFragment(),
data = JSON.parse( my_JSON_data );
for( var i = 0; i < data.items.length; ++i ) {
var v = data.items[i];
frag.appendChild( document.createElement('h5') ).innerHTML = v.title;
frag.appendChild( document.createElement('p') ).innerHTML = "By: " + v.author;
}
div.appendChild( frag );
使用documentFragment 的好处是您可以通过片段而不是多个附加来对DOM 进行一次附加。这样可以提供更好的性能,尤其是在您拥有大量数据的情况下。