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>