有如下html结构
.tree {
background: #eee;
}
.tree_dir {
line-height: 1.67;
}
.dir_title {
font-weight: 700;
margin-bottom: .72em;
cursor: pointer;
}
.tree_dir .dir_title {
margin-left: 1em;
}
.dir_children {
margin-left: 1em;
border-left: 1px dotted #000;
display: none;
}
.dir_title.open + .dir_children {
display: block;
}
/*.dir > .dir_children{
margin-left: 0;
}*/
.dir_children_file {
margin-left: 1em;
margin-bottom: .72em;
display: block;
}
<div class="tree">
<div class="tree_dir">
<div class="dir_title open">level1</div>
<div class="dir_children">
<a href="http://baidu.com" class="dir_children_file">百度</a>
<a href="http://qq.com" class="dir_children_file">QQ</a>
<a href="http://sina.com.cn" class="dir_children_file">sina</a>
<a href="http://163.com" class="dir_children_file">163</a>
<div class="dir_title open">level2</div>
<div class="dir_children">
<a href="http://baidu.com" class="dir_children_file">百度</a>
<a href="http://qq.com" class="dir_children_file">QQ</a>
<a href="http://sina.com.cn" class="dir_children_file">sina</a>
<a href="http://163.com" class="dir_children_file">163</a>
<div class="dir_title open">level3</div>
<div class="dir_children">
<a href="http://baidu.com" class="dir_children_file">百度</a>
<a href="http://qq.com" class="dir_children_file">QQ</a>
<a href="http://sina.com.cn" class="dir_children_file">sina</a>
<a href="http://163.com" class="dir_children_file">163</a>
</div>
</div>
</div>
</div>
</div>
<div class="tree" id="tree"></div>
和这样的 data 数据
var data = [{
level1: {
"百度": "http://baidu.com",
"QQ": "http://qq.com",
"sina": "http://sina.com.cn",
"163": "http://163.com",
level2: {
"百度": "http://baidu.com",
"QQ": "http://qq.com",
"sina": "http://sina.com.cn",
"163": "http://163.com",
level3: {
"百度": "http://baidu.com",
"QQ": "http://qq.com",
"sina": "http://sina.com.cn",
"163": "http://163.com"
}
}
}
}];
我写了一点点 js 代码然后被卡住了
// 菜鸟代码 请无视。。。
function Tree(selector, data) {
this.el = document.querySelector(selector);
// 遍历数组
for (var i = 0; i < data.length; i++) {
var dirData = data[i],
ctn = document.createElement('div');
ctn.className = 'tree_dir';
for (var x in dirData) {
// 不会写了
if(typeof dirData[x] === 'object'){
}
}
this.el.appendChild(ctn);
}
function _f(){}
}
new Tree('#tree', data);
怎么封装成一个 js 函数,以便传入一个规定格式的 data 数据生成 html。
我已经被递归绕晕了。求解。
【更新】谢谢大家的回答,我才发现 data 不应该是数组,而应该是
var data = {
level1: { // 第一个顶级
"百度": "http://baidu.com",
"QQ": "http://qq.com",
"sina": "http://sina.com.cn",
"163": "http://163.com",
level2: {
"百度": "http://baidu.com",
"QQ": "http://qq.com",
"sina": "http://sina.com.cn",
"163": "http://163.com",
level3: {
"百度": "http://baidu.com",
"QQ": "http://qq.com",
"sina": "http://sina.com.cn",
"163": "http://163.com"
}
}
},
siblingsLevel1: { // 第二个顶级
...
level2:...
}
};
这样就应该在同一个 .tree
下面生成两个 .tree_dir
<div class="tree">
<div class="tree_dir">...</div>
<div class="tree_dir">...</div>
</div>
[已解决]谢谢各位帮助。
http://jsfiddle.net/shannon9/Lhhfx8dm/embedded/
function Tree(selector, data) {
}
new Tree('#tree', data);