最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS構建頁面的DOM節(jié)點結構的實現(xiàn)代碼

 更新時間:2011年12月09日 00:47:51   作者:  
本來想用json格式的,可是要么有重復,要么得嵌套,所以改用對象嵌套數(shù)組
小提示:
關于數(shù)組的concat和push方法。
兩者的區(qū)別主要有:
concat是連接數(shù)組,不會修改原數(shù)組,返回值為連接后的數(shù)組,與push的重要區(qū)別是concat會展開數(shù)組的第一層子數(shù)組
push是添加數(shù)組元素。就地修改原數(shù)組,返回值為添加的新項,push不會展開傳入的數(shù)組。
復制代碼 代碼如下:

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格式的,可是要么有重復,要么得嵌套,所以改用對象嵌套數(shù)組。
獲取了結構之后,節(jié)點樹基本也就確定了,直接構造成樹形菜單就可以了。
當然,還是構成簡單的樹形菜單,見 http://m.fzitv.net/article/29100.htm
遍歷和構建的函數(shù)如下:
復制代碼 代碼如下:

//遍歷節(jié)點
function walkDom(el){
var c = el.firstChild;
var retObj = {};
var array = [];
while(c !== null){//這里只是返回了元素節(jié)點,沒有節(jié)點就是個空數(shù)組
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">
//遍歷節(jié)點
function walkDom(el){
var c = el.firstChild;
var retObj = {};
var array = [];
while(c !== null){//這里只是返回了元素節(jié)點,沒有節(jié)點就是個空數(shù)組
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>

結果如下(未美化):

相關文章

  • ES6中字符串string常用的新增方法小結

    ES6中字符串string常用的新增方法小結

    這篇文章主要介紹了ES6中字符串string常用的新增方法,結合實例形式總結分析了ES6中字符串string常用的新增方法功能與使用技巧,需要的朋友可以參考下
    2017-11-11
  • JavaScript程序員應該知道的45個實用技巧

    JavaScript程序員應該知道的45個實用技巧

    在這篇文章中,我將分享一組JavaScript的技巧、竅門和最佳實踐,這些都是JavaScript程序員應該知曉的,不管他們是使用在瀏覽器/引擎上,還是服務器端(SSJS——Service Side JavaScript)JavaScript解釋器上
    2014-03-03
  • javascript 關于# 和 void的區(qū)別分析

    javascript 關于# 和 void的區(qū)別分析

    href 為#的跳到了自己的頁面。原來‘#’代表的是 #top ,
    2009-10-10
  • 使用BroadcastChannel進行跨窗口通信的實例詳解

    使用BroadcastChannel進行跨窗口通信的實例詳解

    BroadcastChannel 提供了一種簡單而有效的方式來實現(xiàn)同一瀏覽器環(huán)境下不同頁面或腳本之間的通信,對于需要跨窗口、標簽頁或 iframe 同步數(shù)據(jù)的應用場景,它是一種非常便捷的解決方案,本文介紹了如何使用 BroadcastChannel 進行跨窗口通信,需要的朋友可以參考下
    2024-08-08
  • ie下動態(tài)加態(tài)js文件的方法

    ie下動態(tài)加態(tài)js文件的方法

    接觸過相關知識的都知道,動態(tài)向DOM中添加js的script標簽時,在各種瀏覽器下會有不同的表現(xiàn)。
    2011-09-09
  • 微信小程序實現(xiàn)音樂播放頁面布局

    微信小程序實現(xiàn)音樂播放頁面布局

    這篇文章主要為大家詳細介紹了JS實現(xiàn)京東商品分類側邊欄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • JS動態(tài)插入腳本和插入引用外部鏈接腳本的方法

    JS動態(tài)插入腳本和插入引用外部鏈接腳本的方法

    js 動態(tài)插入腳本的是在頁面加載時不存在,但將來的某一時刻通過修改該 DOM 動態(tài)添加的腳本。接下來通過本文給大家介紹JS動態(tài)插入腳本和插入引用外部鏈接腳本,需要的朋友可以參考下
    2018-05-05
  • 原生js簡單實現(xiàn)放大鏡特效

    原生js簡單實現(xiàn)放大鏡特效

    這篇文章主要為大家詳細介紹了原生js簡單實現(xiàn)放大鏡特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JavaScript實現(xiàn)的九種排序算法

    JavaScript實現(xiàn)的九種排序算法

    這篇文章主要給大家介紹了關于利用JavaScript實現(xiàn)的九種排序算法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • javascript原始值和對象引用實例分析

    javascript原始值和對象引用實例分析

    這篇文章主要介紹了javascript原始值和對象引用的方法,實例分析了javascript原始值和對象引用的功能、定義與相關技巧,需要的朋友可以參考下
    2015-04-04

最新評論

育儿| 依安县| 大洼县| 元谋县| 桐城市| 纳雍县| 工布江达县| 斗六市| 凉城县| 监利县| 郎溪县| 广饶县| 西畴县| 中牟县| 房产| 太原市| 额济纳旗| 富锦市| 公主岭市| 偏关县| 昔阳县| 泽普县| 理塘县| 即墨市| 赤城县| 镇远县| 高淳县| 同心县| 正安县| 佳木斯市| 宁陕县| 英德市| 辉县市| 通州区| 浏阳市| 卢龙县| 台前县| 永登县| 梨树县| 新宁县| 昌都县|