首页 > 解决方案 > 从对象动态创建元素

问题描述

我有一个看起来像这样的对象

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

标签: javascripthtmlobjectfor-loop

解决方案


您应该使用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)
   }
}

这是一个工作示例,尽管您想将所有节点附加到同一个列表项似乎有点奇怪。


推荐阅读