DOM映射、JSON、ajax基础知识

1.DOM映射:
  • 页面中的元素通过DOM方法来获取回来的元素,这个集合仍然和页面中的元素存在这种一一对应的关系就是DOM映射。并且即使这个元素暂时不存在,这个变量lis集合仍然会随着页面内li的增加而增加,减少而减少
var list=document.getElementById('list');
var lis=list.getElementsByTagName('li');
//通过dom方法获取的集合
console.log(lis); //  HTMLCollection  类数组集合
2.DOM回流
  • 页面中元素位置的改变或者增加/删除,都会引起DOM回流;(比重绘要更费性能)
3.DOM重绘
  • DOM重绘(不会影响其他人),一般就是元素样式的改变会引起重绘;
4.把已经排好序的这些li重新添加到元素中->看是添加到末尾还是原有的元素互相交换位置?
  • 经过验证,就是把原有元素重新调换位置;
  • 使用appendChid(动态添加)的方式不会影响元素的任何属性,曾经绑定过的事件现在还存在
//方法1,循环把已经排好序的这些li重新添加到元素中->看是添加到末尾还是原有的元素互相交换位置?
for(var i=0;i<lisAry.length;i++){
    list.appendChild(lisAry[i]); //依次塞入页面,会造成多次DOM回流,非常的耗性能
}


//方法2,使用文档碎片,减少dom回流次数
//创建一个文档碎片,作为dom的临时容器
var frg=document.createDocumentFragment(); 
for(var i=0;i<lisAry.length;i++){
    frg.appendChild(lisAry[i]); //暂时先把这些li添加到文档碎片中
}
list.appendChild(frg);//把包含所有li的文档碎片添加到list列表中;只造成了一次dom回流
frg=null;//frg就没有用了;js没办法释放内存,就写这句表明不再用这块内存了(写不写都行)
5.如果在页面中原有的基础上添加4个li(两种方法)
//方法1,动态创建的方法(引起了4次DOM回流,可以用文档碎片减少dom回流)
 for(var i=5;i<=8;i++){
     var li=document.createElement('li');
     li.innerHTML=i;
     list.appendChild(li);
 }

//方法2,innerHTML的方式(滑动事件全都没了,不过只引起了一次页面回流);
 // 会破坏原有元素的属性,如果元素之前没有属性最好用这种方法
  var str='';
  for(var i=9;i<=10;i++){
     str+='<li>'+i+'</li>';
  }
  list.innerHTML=list.innerHTML+str;//重新赋值了,所以原有的事件属性全都没了  // list.innerHTML+=str;
6.总结(动态创建和innerHTML)
  • 动态创建的方式并不会影响原有元素的任何属性,但是操作起来不方便,还有可能引起多次DOM回流;
  • innerHTML的方式操作起来比较简便,但是会破坏原有元素的属性(原有的元素不存在了)不存在任何元素时使用比较合适;
  • 使用innerHTML方式会比较多,不过不再用拼接字符串的方式,改用‘模板引擎’
7.JSON
  • JSON就是一种数据格式,在跨平台中兼容性比较好;
  • JSON格式:属性名字用双引号包含,属性值如果是字符串也用双引号包含;
  • JSON.parse: 把一个JSON格式的字符串,转化为一个JSON格式的对象 (不兼容时可以用eval)
  • JSON.stringify:把一个JSON格式的对象,转化为一个JSON格式的字符串
  • JSON在IE7及以下不兼容
var obj={ //js对象
  name:'zf',
  age:8
};
var jsonObj={ //JSON格式对象
  "name":"zf",
  "age":8
};
console.log(window.JSON);//JSON对象

var res=JSON.stringify(jsonObj);
console.log(res);  //{"name":"zf","age":8}
var res1=JSON.parse(res);
console.log(res1); //Object {name: "zf", age: 8}
  • JSON.parse()=>eval //处理兼容性问题
function jsonParse(jsonStr){
    if(window.JSON){  //要么是JSON对象(true),要么是undefined
        return JSON.parse(jsonStr);
    }else{  //IE7及以下
        return eval('('+jsonStr+')');
    }
}


function jsonParse(jsonStr){
    //用三元运算
    return window.JSON ? JSON.parse(jsonStr) : eval('('+jsonStr+')');
}
7.in运算符
  • in运算符用来判断一个属性是否属于一个对象(不管是私有属性还是公有属性),返回布尔值
  • 公有属性如果可以调用,也返回真;判断时属性名字要用字符串
  • ‘setInterval’ in window true
把类数组集合转化为数组的函数,封装起来
var utils = {
    listToArray : function (lis) {
        try {
            return Array.prototype.slice.call(lis, 0);
      } catch (e) {
            console.log(e.message);//打印错误信息
            var ary = [];
            for (var i = 0; i < lis.length; i++) {
                ary.push(lis[i]);
           }
            return ary;
       }
   }
};
8.ajax基本写法:
1,var xhr=new XMLHttpRequest();
2,xhr.open(get/post,url,true/false);

get/post:请求方式;
url: 接口(后台提供);
true/false:同步/异步 同步原地死等 异步多任务
3,xhr.onreadystatechange=function(){} 当状态码改变的时候触发

xhr.readyState==4 代表xhr回来了
xhr.readyStatus==200 代表成功获取到数据
xhr.responseText 存放获取回来的数据
4,xhr.send(null)


;(function(){
    //ajax
    var xhr=new XMLHttpRequest(); //创建一个异步对象
    xhr.open('get','data.txt',false);//get/post方式/接口(地址)/同步(false)还是异步(true)
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4 && xhr.status==200){  //404 不存在  //500 服务器错误  //200 成功  //300 本地缓存
            data=JSON.parse(xhr.responseText);//这个属性保存着从接口获取回来的数据,响应文本
      }
   };
    xhr.send(null);//也可以不写null
})();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352