JavaScript中級 (二) ---- 頁面綁定的方法

1. 映射

 1.當頁面結構發生變化的時候,元素集合也會跟着發生改變;
 2.當操作元素集合的時候,頁面結構也會跟着改變;

2. 頁面綁定 — 直接對DOM進行操作

問題:引發多次迴流
注: 迴流: 當頁面由局部變動的時候,整個頁面都重新加載;
例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<ul>
    <li><span>0</span>一個時期的目標任務。</li>
    <li><span>1</span>提出當前和今後任務。</li>
</ul>
<script src="json1.js"></script>
<script>
    var oUl=document.getElementsByTagName('ul')[0];
    var aLi=oUl.getElementsByTagName('li');
    var ary = [
    {
        "title": "講話",
        "desc": "深刻分析反腐敗鬥爭依然嚴峻複雜的形勢,提出當前和今後一個時期的目標任務。"
    },
    {
        "title": "簡政放權",
        "desc": "確定完善高新技術企業認定辦法,使更多創新型企業得到政策支持。"
    },
    {
        "title": "講話",
        "desc": "深刻分析反腐敗鬥爭依然嚴峻複雜的形勢,提出當前和今後一個時期的目標任務。"
    },
    {
        "title": "簡政放權",
        "desc": "確定完善高新技術企業認定辦法,使更多創新型企業得到政策支持。"
    },
    {
        "title": "講話",
        "desc": "深刻分析反腐敗鬥爭依然嚴峻複雜的形勢,提出當前和今後一個時期的目標任務。"
    },
    {
        "title": "簡政放權",
        "desc": "確定完善高新技術企業認定辦法,使更多創新型企業得到政策支持。"
    }
];
    for(var i=0; i<aLi.length; i++){
        aLi[i].onmouseover=function(){
            this.style.background='lightBlue';
        };
        aLi[i].onmouseout=function(){
            this.style.background='white';
        };
    }

    for(var i=0; i<ary.length; i++){
        var cur=ary[i];
        var oLi=document.createElement('li');
        oLi.innerHTML='<span>'+(i+2)+'</span>'+cur.desc;
        oUl.appendChild(oLi);     // 直接DOM操作
    }

</script>
</body>
</html>

3. 頁面綁定 —- 字符串拼接

工作中的用的最多的-字符串拼接;
字符串拼接的優點:
1.簡單
2.性能高:只對頁面進行一次的DOM操作;不會引發太多的迴流
字符串拼接的缺點:
相當於把頁面中的所有內容都拿出來,重新進行字符串拼接,拼接成一個新的字符串,再放入頁面,那麼每個元素以前的事件,就都沒有了;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<ul>
    <li><span>0</span>一個時期的目標任務。</li>
    <li><span>1</span>提出當前和今後任務。</li>
</ul>
<script src="json1.js"></script>
<script>
    var oUl=document.getElementsByTagName('ul')[0];
    var aLi=oUl.getElementsByTagName('li');
    var ary = [
    {
        "title": "講話",
        "desc": "深刻分析反腐敗鬥爭依然嚴峻複雜的形勢,提出當前和今後一個時期的目標任務。"
    },
    {
        "title": "簡政放權",
        "desc": "確定完善高新技術企業認定辦法,使更多創新型企業得到政策支持。"
    },
    {
        "title": "講話",
        "desc": "深刻分析反腐敗鬥爭依然嚴峻複雜的形勢,提出當前和今後一個時期的目標任務。"
    },
    {
        "title": "簡政放權",
        "desc": "確定完善高新技術企業認定辦法,使更多創新型企業得到政策支持。"
    },
    {
        "title": "講話",
        "desc": "深刻分析反腐敗鬥爭依然嚴峻複雜的形勢,提出當前和今後一個時期的目標任務。"
    },
    {
        "title": "簡政放權",
        "desc": "確定完善高新技術企業認定辦法,使更多創新型企業得到政策支持。"
    }
];
    for(var i=0; i<aLi.length; i++){
        aLi[i].onmouseover=function(){
            this.style.background='lightBlue';
        };
        aLi[i].onmouseout=function(){
            this.style.background='white';
        };
    }

    var str='';
    for(var i=0; i<ary.length; i++){
        str+='<li><span>'+(i+2)+'</span>'+ary[i].desc+'</li>'
    }
    oUl.innerHTML+=str; //相當於: oUl.innerHTML=oUl.innerHTML+str;
</script>
</body>
</html>

4. 文檔碎片化

注意 文檔碎片的釋放–堆內存的釋放

使用文檔碎片在某些情況下可以提高頁面效率
javascript操作dom是一個很耗性能的過程,在某些情況下,不得不進行dom循環操作,我們每次對dom的操作都會觸發”重排”,這嚴重影響到能耗,一般通常採取的做法是儘可能的減少dom操作來減少”重排”。

  面對循環操作dom的過程,我們選擇使用文檔碎片(creatDocumentFragment),將需要添加到dom中的內容一次性添加到文檔碎片中,然後將文檔碎片添加到dom樹,這樣就可以有效的減少操作dom的次數。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<ul>
    <li><span>0</span>一個時期的目標任務。</li>
    <li><span>1</span>提出當前和今後任務。</li>
</ul>
<script src="json1.js"></script>
<script>
    var oUl=document.getElementsByTagName('ul')[0];
    var aLi=oUl.getElementsByTagName('li');
    var ary = [
    {
        "title": "講話",
        "desc": "深刻分析反腐敗鬥爭依然嚴峻複雜的形勢,提出當前和今後一個時期的目標任務。"
    },
    {
        "title": "簡政放權",
        "desc": "確定完善高新技術企業認定辦法,使更多創新型企業得到政策支持。"
    },
    {
        "title": "講話",
        "desc": "深刻分析反腐敗鬥爭依然嚴峻複雜的形勢,提出當前和今後一個時期的目標任務。"
    },
    {
        "title": "簡政放權",
        "desc": "確定完善高新技術企業認定辦法,使更多創新型企業得到政策支持。"
    },
    {
        "title": "講話",
        "desc": "深刻分析反腐敗鬥爭依然嚴峻複雜的形勢,提出當前和今後一個時期的目標任務。"
    },
    {
        "title": "簡政放權",
        "desc": "確定完善高新技術企業認定辦法,使更多創新型企業得到政策支持。"
    }
];
    for(var i=0; i<aLi.length; i++){
        aLi[i].onmouseover=function(){
            this.style.background='lightBlue';
        };
        aLi[i].onmouseout=function(){
            this.style.background='white';
        };
    }

    var frg=document.createDocumentFragment(); //文檔碎片(當把文檔碎片付給某節點時,只是把文檔碎片中的子節點付給了某節點,它本身並沒有插入到這個節點中) 
    for(var i=0; i<ary.length; i++){
        var cur=ary[i];
        var oLi=document.createElement('li'); //創建一個節點
        oLi.innerHTML='<span>'+(i+2)+'</span>'+cur.desc;  // 給節點添加內容
        frg.appendChild(oLi);      // 把我們要插入頁面的內容放入frg裏;
    }
    oUl.appendChild(frg);   // 講frg文檔插入到ul的末尾
    frg=null;     //堆內存的釋放;爲了提高瀏覽器的性能;
</script>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章