我有一个看起来像这样的对象
var nodes = [{
'name': 'Test1',
'address': 'Street 1',
'zipcode': '1234',
'city': 'Big City',
'phone': '12345678',
'email': 'test@test.com',
'web': 'www.test.com'
},
{
'name': 'Test12',
'address': 'Street 5',
'zipcode': '5678',
'city': 'Bigger City',
'phone': '89898989',
'email': 'test2@test2.com',
'web': 'www.test2.com'
}
]
我想要遍历此对象并根据值动态创建一个带有textNode的span元素,然后将键用于类
var elm = document.createElement('span')
elm.appendChild(document.createTextNode(THEVALUE))
elm.setAttribute('class', THEKEY)
li.appendChild(elm)
目前我正在使用基本的for循环,但是我不确定仅提取密钥的最佳方法
for (var i = 0; i < nodes.length; i++) {
var elm = document.createElement('span')
elm.appendChild(document.createTextNode(nodes[i]))
li.appendChild(elm)
}
预期结果将是
<span class="name">Test1</span>
<span class="address">Street 1</span>
我正在使用香草JS
答案 0 :(得分:2)
对于内部循环,您应该使用for...in
,这将使您可以遍历每个节点的属性:
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
for(var key in node){
var elm = document.createElement('span')
elm.appendChild(document.createTextNode(node[key]))
elm.className = key;
li.appendChild(elm)
}
}
Here is a working example,尽管您想将所有节点附加到同一列表项中似乎有些奇怪。
答案 1 :(得分:1)
您可以使用Object.entries
进行迭代以同时获取键和值。当一个元素的唯一子节点将是一个文本节点时,它比指定显式创建文本节点更简单,分配给textContent
可能更好:
var nodes = [{
'name': 'Test1',
'address': 'Street 1',
'zipcode': '1234',
'city': 'Big City',
'phone': '12345678',
'email': 'test@test.com',
'web': 'www.test.com'
},
{
'name': 'Test12',
'address': 'Street 5',
'zipcode': '5678',
'city': 'Bigger City',
'phone': '89898989',
'email': 'test2@test2.com',
'web': 'www.test2.com'
}
]
const ul = document.querySelector('ul');
nodes.forEach(node => {
const li = ul.appendChild(document.createElement('li'));
for (const [key, val] of Object.entries(node)) {
const span = document.createElement('span');
span.className = key;
span.textContent = val;
li.appendChild(span);
}
});
console.log(ul.innerHTML);
<ul></ul>
答案 2 :(得分:0)
如果您想要类似
的输出<span class="name">Test1</span>
<span class="address">Street 1</span>
然后尝试一下
for (var i = 0; i < nodes.length; i++) {
for(var val in nodes[i]){
var elem = document.createElement('span')
elem.appendChild(document.createTextNode(nodes[i][val]))
elem.className = val;
console.log(elem)
}
}
答案 3 :(得分:0)
这将帮助您。
var nodes = [{
'name': 'Test1',
'address': 'Street 1',
'zipcode': '1234',
'city': 'Big City',
'phone': '12345678',
'email': 'test@test.com',
'web': 'www.test.com'
},
{
'name': 'Test12',
'address': 'Street 5',
'zipcode': '5678',
'city': 'Bigger City',
'phone': '89898989',
'email': 'test2@test2.com',
'web': 'www.test2.com'
}
];
var list = document.getElementById("list");
for (var i = 0, length=nodes.length; i < length; i++)
{
var node = nodes[i];
Object.keys(node).forEach(function(key){
var elm = document.createElement('span');
elm.appendChild(document.createTextNode(node[key]));
elm.setAttribute('class', key)
list.appendChild(elm);
})
}
console.log(list.innerHTML)
<div id="list"></div>