将JSON对象呈现为HTML,呈现函数don't渲染深层对象
Rendering JSON object into HTML, render function don't render deep objects
我有这个JSON布局:
[
{
"tag": "div",
"attr": [
["id", "sortSideStyleIlluminated"],
["class", "sortSideWidget"]
],
"childs": [
{
"tag": "img",
"attr": [
["class", "sortSide"],
["src","/images/sort-side-col/style-illuminated.jpg"],
["width", 185],
["height", 58],
["alt", "Style Illuminated"]
]
},
{
"tag": "br"
},
{
"tag": "br"
},
{
"tag": "div",
"text": "This div have childs",
"childs": [
{
"tag": "b",
"text": "hellow"
}
]
}
]
},
{
"tag": "div",
"attr": [
["id", "sortSideStyleIlluminated"],
["class", "sortSideWidget"]
],
"childs": [
{
"tag": "img",
"attr": [
["class", "sortSide"],
["src","/images/sort-side-col/style-illuminated.jpg"],
["width", 185],
["height", 58],
["alt", "Style Illuminated"]
]
},
{
"tag": "br"
},
{
"tag": "br"
},
{
"tag": "span",
"text": "Widget 2"
}
]
}
]
我正在尝试使用一个自调用函数来呈现页面,以呈现childs的所有childs。。。但我不知道是什么原因,我的函数只渲染了两个级别的子。我的功能:
function renderWidgets(order){
var result = document.createElement('div'),
createEl = function(el){
var element = document.createElement(el.tag);
for(var i in el.attr){
if(el.attr[i]) element.setAttribute(el.attr[i][0], el.attr[i][1]);
}
for(var i in el.childs){
var child = createEl(el.childs[i]);
child.innerHTML = el.childs[i].text ? el.childs[i].text : "";
element.appendChild(child);
}
return element;
};
for(var i in order){
if(widgets[order[i]]){
var widgetElement = createEl(widgets[order[i]]);
result.appendChild(widgetElement);
}
}
return result;
}
document.body.appendChild(renderWidgets([0,1]));
你能看一下代码,看看这里出了什么问题吗?谢谢,
住在JSBin:http://jsbin.com/ilubic/edit#javascript,html,实时
尝试一个真正的递归函数:
function renderWidgets(widgets, container){
var i, k, curr, element;
for (i=0; i<widgets.length; i++) {
curr = widgets[i];
element = container.appendChild( document.createElement(curr.tag) );
if (curr.text > "") {
element.innerHTML = curr.text;
}
if (curr.attr && curr.attr.length > 0) {
for (k=0; k<curr.attr.length; k++) {
element.setAttribute(curr.attr[k][0], curr.attr[k][1]);
}
}
if (curr.childs && curr.childs.length > 0) {
renderWidgets(curr.childs, element);
}
}
}
称之为:
var widgets = [ /* your widget array */ ];
var result = document.createElement('div');
renderWidgets(widgets, result);
如果您想处理order
,那么您确实应该在函数之外进行处理,以保持事物的干净和分离。
renderWidgets([widgets[1], widgets[0]], result);
相关文章:
- 创建对象函数原型和代码是错误的
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- 如何从onclick字符串中引用javascript对象函数
- 更改对象函数仅用于示例
- javascript和jQuery的嵌套对象函数中的变量范围
- 将对象函数传递给请求动画帧时丢失对象引用
- 对象函数返回函数而不是值
- 使用onclick调用属性对象函数
- javascript拉斐尔对象函数传递
- 如何从onClick事件调用对象函数
- 可以't获取具有“t”的对象变量;这个“;由setTimeout()函数调用的对象函数中的属性
- 对象没有't继承父对象函数
- 调用父对象函数
- "这个“;对象函数内部的引用
- 将变量添加到对象函数调用的末尾
- 传单错误:对象函数没有方法'createIcon'在LayerGroup中创建自定义图标标记时
- TypeError:对象函数Object(){〔本机代码〕}没有方法'方法'
- 挖空 - 单击绑定到对象函数 - 范围问题
- 类型错误: 对象函数...没有方法“打开”
- JavaScript 对象函数