javascript - 从对象动态创建元素

标签 javascript html object for-loop

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

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 循环,但我不确定仅提取 key 的最佳方法

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

最佳答案

您应该使用 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 ,尽管您想要将所有节点附加到同一个列表项似乎有点奇怪。

关于javascript - 从对象动态创建元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51077986/

相关文章:

JavaScript:由 getElementsByTagName() 创建的数组不会返回其元素的长度?

javascript - 需要客户端 JavaScript 中的 PayPal PDT 示例代码

javascript - 使用元素选择器实现隐藏和点击功能的区别

html - schema.org 微数据 - 文章所需的图像

html - 显示 :flex for the Inernet explorer? 的最佳替代方案是什么

JavaScript 图像同步

c++ - 另一个 C++ 池球对象数组问题

javascript - 使用javascript从数组创建一个对象

javascript - 具有多个异步操作的 Extjs Promise

java - 如何从对象数组中的 1 个对象访问数据 - java