递归动态创建了折叠菜单,每个层级的缩进样式应该怎么添加处理?
数据
{
"code": 100,
"content": {
"rows": [
{ "id": "1", "name": "父节点1", "url": "www", "pid": "0" },
{ "id": "4", "name": "父节点11", "url": "", "pid": "1" },
{ "id": "13", "name": "父节点111", "url": "", "pid": "4" },
{ "id": "14", "name": "父节点112", "url": "", "pid": "4" },
{ "id": "5", "name": "父节点12", "url": "", "pid": "1" },
{ "id": "6", "name": "父节点13", "url": "", "pid": "1" },
{ "id": "2", "name": "父节点4", "url": "", "pid": "0" },
{ "id": "7", "name": "父节点41", "url": "", "pid": "2" },
{ "id": "8", "name": "父节点42", "url": "", "pid": "2" },
{ "id": "9", "name": "父节点43", "url": "", "pid": "2" },
{ "id": "3", "name": "父节点5", "url": "", "pid": "0" },
{ "id": "10", "name": "父节点51", "url": "", "pid": "3" },
{ "id": "11", "name": "父节点52", "url": "", "pid": "3" },
{ "id": "12", "name": "父节点53", "url": "", "pid": "3" }
]
},
"message": "成功"
}
//主方法,运用递归实现
var createTree = function(jsons, pid) {
if (jsons != null) {
var ul = '<ul class="">';
for (var i = 0; i < jsons.length; i++) {
if (jsons[i].pid == pid) {
ul += '<li>' + jsons[i].name + "</li>";
ul += createTree(jsons, jsons[i].id);
}
}
ul += "</ul>";
}
return ul;
}
//调用
$.ajax({
url: '../../json/treeListView.json',
dataType: 'json',
type: 'get',
async: false,
success: function(data) {
if (data.code == 100) {
var treeData = data.content.rows;
var ul = createTree(treeData, 0);
$("#continer").append(ul);
}
}
});
目前的页面效果
想要实现的效果
如题:每个level的父级都要比它的上一级向右缩进20px
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
先看演示:https://jsfiddle.net/gyb5yh3v/
数据就用的题主给的那个,赋给变量名
data
下面用 es6 语法写了一个
TreeBuilder
构造的时候传入
data
,调用makeTree
把数据变成树结构(使用children
保存子节点)调用
build
构造 DOM 树最后生成
TreeBuildre
的实例,并调用build
生成树的根<ul>
,加入到容器(假设其 ID 是tree
)中去这里有几点要提醒一下
生成 DOM 树的时候,不建议使用字符串拼接。可以使用 jQuery 的方法来构建 DOM 树 (自己处理字符串拼接需要考虑特殊字符)
建议将数据处理和 UI 处理分开进行。如果没有性能问题,最好不要一边处理数据一边处理 UI (需要性能优化的情况除外)
建议使用 zTree,如果要做成菜单可以考虑修改(overwrite)其样式表来实现自己需要的样式。
你的数据中的pid代表什么内容? 如果是代表等级的话,为什么
父节点5x
的pid是3??在线预览: https://jsfiddle.net/5cf4tf2z/
代码没有问题,CSS 样式应该是被抹平了,试一下这个:
另外,不建议你使用
==
,我改一下: