DOM知识整理

DOM即文档对象模型 EcmaScript主要的构成就是JS+DOM+BOM。对DOM的操作是很重要的部分,而且不容易理解

获取DOM元素

document.getElementById(docID);//以id获取文档内的元素 *注意getElementById方法只能用在document上
 如otherEle.getElementById(docID);//这样是会出错的
document.getElementsByTagName(tag);//通过TagName获取元素集合(不是数组),如div,span等等
document.getElementsByClassName(className);//这个是HTML5中扩展的相当有用的方法,通过类名获取元素集合
node.parentNode //获取父节点
node.nextSibling //获取同级的下一个节点
node.previousSibling//获取同级的上一个节点
node.firstChild //获取第一个子节点
node.lastChild //获取最后一个子节点
node.hasChildNodes() //判断当前节点是否有子节点
node.childNodes //当前节点的所有子节点
node.children //获取当前节点的除文本节点之外的所有子节点。(区分于node.childNodes)

类操作(HTML5)

node.classList//获取元素的类名集合
node.classList.add(cName)
node.classList.contains(cName)//判断该元素是否含有传入的类名
node.classList.remove(cName)
node.classList.toggle(cName)//if(exist){ remove } else { add }
node.classList[index];//根据索引获取类名
node.classList.item(index);//同上

数据(HTML5)

HTML5规范中可以给元素添加自定义属性:data-前缀 = "xxxdata"
例如:<div data-sex="boy" id="DDD"></div>
var d = document.getElementById("DDD");
d.dataset;//该元素存储的数据集合
d.dataset["sex"]或d.dataset.sex;//去掉前缀 data- 即可获取到数据

操作节点的方法

pNode.appendChild(newNode) //如果传入的节点已经在文档中已经存在,则将该节点从原来的位置转移到新位置。
pNode.insertBefore(node)
pNode.replaceChild(node)
pNode.removeChild(node)
node.cloneNode([Boolean]) //默认为true true为深复制,false为浅复制。IE下存在Bug:它会复制绑定到该元素的事件,所以在复制之前可以根据实际情况提前移除事件绑定。

//将NodeList转换为数组的函数
function nodelistToArray(nodes){
    var array = null;
    try{//非IE
        array=Array.prototype.slice.call(nodes,0);
    }catch(e){//IE
        array = new Array();
        for(var i =0;len = nodes.length;i<len;i++){
            array.push(nodes[i]);
        }
    }
    return array;
}

改变元素内容

ele.innerHTML = "...";//直接改变元素的html。有些文章说这个方法是比插入DOM快,这点是错的。亲测结果是在Chrome下后者比前者快1/5;
原文地址:https://www.cnblogs.com/TiestoRay/p/2716824.html