JSON对象的递归解析以构造HTML元素 [英] Recursive parsing of JSON object to construct HTML elements
问题描述
我正在尝试从JSON对象构建一组HTML元素.我已经成功地从HTML元素构造了对象,但是递归重建一直使我失败.任何人都有一个好的解决方案?
I'm attempting to build a set of HTML elements from a JSON object. I've managed to successfully construct the object from HTML elements, but the recursive rebuild keeps failing on me. Anyone have a good solution?
我的JSON:
{
"0": {
"id": "text-1",
"tag": "div",
"style": {
"left": "92px",
"top": "37px",
"z-index": "3",
"height": "19px",
"width": "98px",
"font-weight": "bold",
"font-style": "italic",
"font-size": "16px",
"color": "rgb(255, 255, 255)"
},
"data": {},
"children": {
"0": {
"tag": "span",
"style": {},
"data": {},
"html": "This is a test.",
"text": "This is a test."
}
}
},
"1": {
"id": "image-1",
"tag": "div",
"style": {
"width": "100px",
"height": "133px",
"left": "91px",
"top": "8px",
"z-index": "1"
},
"data": {},
"children": {
"0": {
"tag": "img",
"style": {},
"data": {},
"html": "",
"text": "",
"src": "http://img2.etsystatic.com/000/0/6490841/il_570xN.351801334.jpg"
}
}
},
"2": {
"id": "video-1",
"tag": "div",
"style": {
"width": "100px",
"height": "50px",
"left": "5px",
"top": "85px",
"z-index": "2"
},
"data": {},
"children": {
"0": {
"tag": "a",
"style": {
"background-image": "url(http://placehold.it/100x50&text=Video)",
"height": "100%",
"width": "100%",
"display": "block",
"background-position": "0% 0%",
"background-repeat": "no-repeat no-repeat"
},
"data": {},
"html": "",
"text": ""
}
}
}
}
推荐答案
I've played a little and came up with this: http://jsfiddle.net/tfBRN/10/
考虑到我不知道什么是data
属性以及html
和text
属性如何相互关联,可以改进此代码.
considering that I have no idea for what is the data
property and how html
and text
properties are related to each other, this code could be improved.
-编辑-
我假设元素和子元素以数组形式给出,而不是以数字属性形式给出.而且我使用jQuery创建元素,添加属性并插入DOM中,但是当然可以使用本机DOM方法执行该操作.
I've assumed that the elements and children are given in array and not as numbered properties. And I've used jQuery to create elements, add properties and insert into DOM, but of course this can be performed using native DOM methods.
var domArray = [
{
"id": "text-1",
"tag": "div",
"style": {
"left": "92px",
"top": "37px",
"z-index": "3",
"height": "19px",
"width": "98px",
"font-weight": "bold",
"font-style": "italic",
"font-size": "16px",
"color": "rgb(100, 100, 100)"
},
"data": {},
"children": [
{
"tag": "span",
"style": {},
"data": {},
"html": "This is a test.",
"text": "This is a test."
}
]
},
{
"id": "image-1",
"tag": "div",
"style": {
"width": "100px",
"height": "133px",
"left": "91px",
"top": "8px",
"z-index": "1"
},
"data": {},
"children": [
{
"tag": "img",
"style": {},
"data": {},
"html": "",
"text": "",
"src": "http://img2.etsystatic.com/000/0/6490841/il_570xN.351801334.jpg"
}
]
},
{
"id": "video-1",
"tag": "div",
"style": {
"width": "100px",
"height": "50px",
"left": "5px",
"top": "85px",
"z-index": "2"
},
"data": {},
"children": [
{
"tag": "a",
"style": {
"background-image": "url(http://placehold.it/100x50&text=Video)",
"height": "100%",
"width": "100%",
"display": "block",
"background-position": "0% 0%",
"background-repeat": "no-repeat no-repeat"
},
"data": {},
"html": "",
"text": ""
}
]
}
];
$(document).ready(function(){
for(var i=0;i<domArray.length;i++) {
createDOMStructure(domArray[i]);
}
});
function createDOMStructure(obj, parent) {
if(parent == undefined) {
parent = $("body"); // or any other element that would be the parent container of all structure
}
var element = $("<" + obj.tag + ">");
delete obj.tag;
if(obj.children) {
for(var i=0;i<obj.children.length;i++) {
createDOMStructure(obj.children[i], element);
}
delete obj.children;
}
element.css(obj.style);
delete obj.style;
element.text(obj.text);
delete obj.text;
for(var prop in obj) {
element.attr(prop, obj[prop]);
}
$(element).appendTo(parent);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
这篇关于JSON对象的递归解析以构造HTML元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!