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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章