美文网首页
常用的DOM操作

常用的DOM操作

作者: Mescal川 | 来源:发表于2016-10-26 23:34 被阅读111次

    DOM(文档对象模型)操作是前端开发人员必须熟练掌握的技术,在与用户进行交互、处理后端返回的JSON(XML)文件等地方都需要用到DOM操作,下面列举一些常用的DOM操作。


    1.获取节点

    document.getElementById("myDiv");
    document.getElementsByTagName("div");//一个集合,[0]获取集合中的第一个元素
    document.getElementsByClassName("myDiv");//IE9以下不支持
    

    2.创建节点

    var myDiv = document.createElement("myDiv");
    myDiv.innerHTML="我是新创建的节点";
    document.getElementsByTagName("body")[0].appendChild(myDiv)//将新创建的节点追加到body中
    

    document.createTextNode()方法同样用于添加文本,相对于innerHTML更加安全,并且兼容各主流浏览器。

    3.插入、删除、创建节点

    var father=document.getElementById("father");//获取父层div引用
    var node1=document.getElementById("son");//获取父层下的一个子元素
    var node2=document.createElement("div");
    node2.innerHTML="我是新创建的";
    father.appendChild(node2);//node2插入到最后的位置
    father.insertBefore(node2,null);//同上
    father.insertBefore(node2,node1);//node2插入到node1前面
    father.replaceChild(node2,node1);//node2替换掉node1
    father.removeChild(node1);//将node1从father节点中删除
    

    4.节点复制

    var cloneNode=father.cloneNode(true);//参数为true代表深复制(复制节点及其整个子节点树)参数为false代表浅复制(只复制节点本身)
    

    5.设置、获取、删除节点属性

    myDiv.setAttribute("id","first");
    myDiv.getAttribute("id");//不能获取用户自定义的属性
    myDiv.removeAttribute("id");
    

    6.常用节点属性

    myDiv.nodeName;//返回节点的名称
    myDiv.nodeType;//返回节点的类型
    myDiv.nodeValue;//返回节点的值(用于input等表单)
    myDiv.childNodes;//返回子节点集合(包含空白换行等非元素节点)
    myDiv.firstChild;//返回第一个子节点
    myDiv.firstElementChild;//返回第一个元素子节点
    myDiv.lastChild;//返回最后一个子节点
    myDiv.lastElementChild;//返回最后一个元素子节点
    myDiv.previousSibling;//返回前一个兄弟节点
    myDiv.previousElementSibling;//返回前一个元素兄弟节点
    myDiv.nextSibling;//返回后一个兄弟节点
    myDiv.nextElementSibling;//返回后一个元素兄弟节点
    myDiv.parentNode;//返回父节点
    element.attributes["id"];//返回含有id属性的节点集合
    

    7.处理后端返回的JSON

    //xhr.onreadystatechange函数中
    var json=JSON.parse(xhr.responseText);
    for(var i=0;i<json.length;i++)
    {
        //创建节点、添加属性、插入到document中
    }
    

    8.DOM操作优化

    DOM操作会对浏览器的性能造成影响,因此要尽可能的减少甚至避免DOM操作。

    //不推荐的做法
    for(var i=0;i<json.length;i++)
    {
        var div = document.createElement("div");
        div.innerHTML(json[i]);
        father.appendChild(div);
    }
    
    //推荐的做法
    var fragment = document.createDocumentFragment();
    for(var i=0;i<json.length;i++)
    {
        var div = document.createElement("div");
        div.innerHTML(json[i]);//用innerHTML来代替createTextNode
        fragment.appendChild(div);
    }
    father.appendChild(fragment);
    

    当DOM操作规模非常大时,将容器的display设为none,等节点操作完成后再设为可见,原理是隐藏的元素不会产生reflow(重构)。

    尽可能地通过添加class来修改样式。

    相关文章

      网友评论

          本文标题:常用的DOM操作

          本文链接:https://www.haomeiwen.com/subject/ldejuttx.html