我有一个JSON对象:
var txt = '{"employees":[' +
'{"firstName":"John","lastName":"Doe","time":"9:15am","email":"john_doe@gmail.com" },' +
'{"firstName":"Anna","lastName":"Smith","time":"9:15am","email":"anna@gmail.com" },' +
'{"firstName":"Peter","lastName":"Jones" ,"time":"9:15am","email":"peter@gmail.com"}]}';
我想在div语句之间打印一个列表:
john_doe@gmail.com
Anna Smith
anna@gmail.com
Peter Jones
我正在尝试填充的HTML看起来像这样:
<div class="info">
<ul>
<li id="name"></li>
<li id="time"></li>
<li id="email"></li>
</ul>
</div>
我如何做到这一点?
<!DOCTYPE html>
<html>
<body>
<h2>Create Object from JSON String</h2>
<div id="output">
</div>
<script type="text/javascript">
var txt = '{"employees":[' +
'{"firstName":"John","lastName":"Doe","time":"9:15am","email":"john_doe@gmail.com" },' +
'{"firstName":"Anna","lastName":"Smith","time":"9:15am","email":"anna@gmail.com" },' +
'{"firstName":"Peter","lastName":"Jones" ,"time":"9:15am","email":"peter@gmail.com"}]}';
var employees=JSON.parse(txt).employees;
var container=document.getElementById("output");
for (i=0;i<employees.length;i++) { //Loops for the length of the list
var info=document.createElement('div');
info.className='info'; //Creates a new <div> element and adds the class info to it
var ul=document.createElement('div'); //Creates <ul> element
info.appendChild(ul); //Adds the <ul> to the newly created <div>
var name=document.createElement('li');
name.className='name'; //Should use class, not id, as ID must be unique
name.innerHTML=employees[i].firstName+' '+employees[i].lastName; //Adds name
ul.appendChild(name);
var time=document.createElement('li');
time.className='time';
time.innerHTML=employees[i].time;
ul.appendChild(time);
var email=document.createElement('li');
email.className='email';
email.innerHTML=employees[i].email;
ul.appendChild(email);
container.appendChild(info); //Adds the final generated HTML to the page
} //Will repeat for each item in list.
</script>
</body>
</html>
答案 0 :(得分:1)
首先,将您的字符串转换为对象:
var employees=JSON.parse(txt).employees;
然后,设置一个循环来构造HTML
var container=//Link to the containing element using getElementById or similar
for (i=0;i<employees.length;i++) { //Loops for the length of the list
var info=document.createElement('div');
info.className='info'; //Creates a new <div> element and adds the class info to it
var ul=document.createElement('div'); //Creates <ul> element
info.appendChild(ul); //Adds the <ul> to the newly created <div>
var name1=document.createElement('li'); //Chrome seems not to like the variable "name" in this instance
name1.className='name'; //Should use class, not id, as ID must be unique
name1.innerHTML=employees[i].firstName+' '+employees[i].lastName; //Adds name
ul.appendChild(name1);
var time=document.createElement('li');
time.className='time';
time.innerHTML=employees[i].time;
ul.appendChild(time);
var email=document.createElement('li');
email.className='email';
email.innerHTML=employees[i].email;
ul.appendChild(email);
container.appendChild(info); //Displays the elements on the page
} //Will repeat for each item in list.
这也可以使用container.innerHTML
来实现,但构建这样的元素可能会混淆DOM,因此通常只推荐用于文本节点,尽管理想情况下你还要使用document.createTextNode()
。< / p>
答案 1 :(得分:0)
首先通过解析它来获取JSON字符串中的数组:
var employees = JSON.parse(txt).employees
然后你创建像这样的HTML元素
var element = document.createElement('div'); // creates an empty div
然后将HTML树与
放在一起someElement.append(otherElement); // makes otherElement a child of someElement