遍历 html 元素 json,深层遍历节点的方法,生成对应的JSON数据

业务需求。我需要把生成的HTML结构生成对应的 JSON。自己写的始终有错误,求指导。

然后目标JSON:

var json = {

"elements": [

{

"layout": {

"value": "4-4-4",

"elements": [

{

"component": {

"widgetIdentity": "c-c:3.0",

"styleId": "4",

"properties": {}

}

},

{

"empty": {}

},

{

"component": {

"widgetIdentity": "c-c:3.0",

"styleId": "4",

"properties": {}

},

"layout": {

"value": "6-6",

"elements": [

{

"component": {

"widgetIdentity": "x-a:4.0",

"styleId": "2",

"properties": {}

}

},

{

"empty": {}

}

]

}

}

]

}

}

]

};

自己的方法:

function createROOT(elements) {

var json = {};

var data = [];

var root = $(elements).children();

$.each(root, function (i, v) {

var child = {};

child.layout = {};

child.layout.value = $(v).attr('data-layout-value');

child.layout.elements = traversalDOM2Json(v);

data.push(child);

});

json.elements = data;

return json

}

function traversalDOM2Json(elements) {

var result = [];

var key = {};

var ele = $(elements).children();

$.each(ele, function (i, v) {

var html = $.trim($(v).html());

if ( html == '') {

key.empty = {};

result.push(key);

} else {

var children = $(this).children();

$.each(children, function (i, v) {

result.push(distinguishDOMType(v));

});

}

});

return result;

};

function distinguishDOMType(elements) {

var childJSON = {};

console.log(elements)

if ( $(elements).hasClass('row') ) {

childJSON.layout = {};

childJSON.layout.value = $(elements).attr('data-layout-value');

childJSON.layout.elements = traversalDOM2Json(elements);

} else {

childJSON.component = {};

childJSON.component.widgetIdentity = $(elements).attr('data-widgetIdentity');

childJSON.component.styleId = $(elements).attr('data-styleId');

childJSON.component.properties = {};

}

return childJSON;

};

var json = createROOT('#test');

console.log(JSON.stringify(json));

输出的JSON:

{

"elements": [

{

"layout": {

"value": "4-4-4",

"elements": [

{

"component": {

"widgetIdentity": "c-c:3.0",

"styleId": "4",

"properties": {}

}

},

{

"empty": {}

},

{

"component": {

"widgetIdentity": "c-c:3.0",

"styleId": "4",

"properties": {}

}

},

{

"layout": {

"value": "6-6",

"elements": [

{

"component": {

"widgetIdentity": "x-a:4.0",

"styleId": "2",

"properties": {}

}

},

{

"empty": {}

}

]

}

}

]

}

}

]

}

也就是最后一个节点的嵌套关系始终不对。求大家指点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值