JS构建页面的DOM节点结构的实现代码_Javascript教程-查字典教程网
JS构建页面的DOM节点结构的实现代码
JS构建页面的DOM节点结构的实现代码
发布时间:2016-12-30 来源:查字典编辑
摘要:小提示:关于数组的concat和push方法。两者的区别主要有:concat是连接数组,不会修改原数组,返回值为连接后的数组,与push的重...

小提示:

关于数组的concat和push方法。

两者的区别主要有:

concat是连接数组,不会修改原数组,返回值为连接后的数组,与push的重要区别是concat会展开数组的第一层子数组

push是添加数组元素。就地修改原数组,返回值为添加的新项,push不会展开传入的数组。

复制代码 代码如下:

var a = [1,2,3,4];

var b = [4,5,6,7];

var c = a.push(b);

var d = a.concat(b);

console.log('a',a);

console.log('b',b);

console.log('c',c);

console.log('d',d);

//输出:

a [1,2,3,4,[4,5,6,7]]//没有展开

b [4,5,6,7]

c 5//push返回新添加的项

d [1,2,3,4,[4,5,6,7],4,5,6,7]//push未展开,concat展开

首先遍历DOM树,然后构建,结果保存形为

复制代码 代码如下:

{

key_1:[{key_1_1:value_1},{key_1_1:value_1},{key_2_1:value_2}],

key_2:[],

key_3:[],

key_4:[],

}

的结构

本来想用json格式的,可是要么有重复,要么得嵌套,所以改用对象嵌套数组。

获取了结构之后,节点树基本也就确定了,直接构造成树形菜单就可以了。

当然,还是构成简单的树形菜单,见 http://www.jb51.net/article/29100.htm

遍历和构建的函数如下:

复制代码 代码如下:

//遍历节点

function walkDom(el){

var c = el.firstChild;

var retObj = {};

var array = [];

while(c !== null){//这里只是返回了元素节点,没有节点就是个空数组

if(c.nodeType == 1){

array.push(walkDom(c));

}

c = c.nextSibling;

}

retObj[el.tagName] = array;

return retObj;

} //构建树形 function createTree(tree){

var array = [];

for(var key in tree){

array.push('<li><h3>');

array.push(key.toLowerCase());

array.push('</h3>');

if(tree[key].length != 0){

array.push('<ul>');

for(var i = 0; i < tree[key].length; i++){

array = array.concat(createTree(tree[key][i]));

}

array.push('</ul>');

}

array.push('</li>');

}

return array;

}

下面是一个demo:

复制代码 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<title></title>

<style type="text/css">

*{ margin: 0; padding: 0;}

body{ line-height: 24px; font-size: 12px;}

ul{ list-style: none;}

ul li{ padding-left: 30px;}

</style>

</head>

<body>

<div id="header">头部</div>

<div id="container">

<h2>第一部分</h2>

<form action="" id="form_1">

<p><label>姓名:</label><input type="text" /></p>

<p><label>年龄:</label><input type="text" /></p>

<p><input type="submit" value="提交"/></p>

</form>

<form action="">

<p><label>手机:</label><input type="text" /></p>

<p><label>邮编:</label><input type="text" /></p>

<p><input type="submit" value="保存"/></p>

</form>

</div>

<div id="footer">脚部</div>

<script type="text/javascript">

//遍历节点

function walkDom(el){

var c = el.firstChild;

var retObj = {};

var array = [];

while(c !== null){//这里只是返回了元素节点,没有节点就是个空数组

if(c.nodeType == 1){

array.push(walkDom(c));

}

c = c.nextSibling;

}

retObj[el.tagName] = array;

return retObj;

}

function createTree(tree){//构建树形

var array = [];

for(var key in tree){

array.push('<li><h3>');

array.push(key.toLowerCase());

array.push('</h3>');

if(tree[key].length != 0){

array.push('<ul>');

for(var i = 0; i < tree[key].length; i++){

array = array.concat(createTree(tree[key][i]));

}

array.push('</ul>');

}

array.push('</li>');

}

return array;

}

var tree = walkDom(document.body);

var ul = document.createElement('ul');

ul.innerHTML = createTree(tree).join('');

document.body.appendChild(ul);

</script>

</body>

</html>

结果如下(未美化):

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类