遍历节点树
parentNode
-----------------父节点(最顶层:#document)childNodes
------------------子节点们firstChild
---------------------第一个子节点lastChild
---------------------最后一个子节点nextSibling
------------------后一个兄弟节点previousSibling
-------------前一个兄弟节点
遍历元素节点
parentElement
-------------返回当前元素的父元素节点(IE8不兼容)children
-------------------- 只返回当前元素的元素子节点firstElementChild
----------第一个元素节点(IE8不兼容)lastElementChild
----------最后一个元素节点(IE8不兼容)node.childElementCount === node.children.length
当前子节点的子元素节点个数(IE8不兼容)nextElementSibling/previousElementSibling
后一个/前一个兄弟元素节点(IE8不兼容)
节点的四个属性
nodeName
- 元素的标签名,以大写形式表示,只读
nodeValue
Text
节点或Comment
节点的文本内容,可读写
nodeType
- 该节点的类型,只读
- 元素节点---------------------------1
- 属性节点---------------------------2
- 文本节点---------------------------3
- 注释节点---------------------------8
document
--------------------------9DocumentFragment
--------------11
attributes
Element
节点的属性组合
节点的方法
Node.hasChildNodes()
-----------该元素是否拥有子节点
document.__proto__; //HTMLDocument
HTMLDocument.__proto__;//Document
Document.__proto__;//Node
Node.__proto__;//EventTarget
EventTarget.__ptoto__;//Object
DOM基本操作
getElementById
方法定义在Document.prototype
上,即Element
节点上不能使用getElementByName
方法定义在HTMLDocument.prototype
上,即非html
中的document
不能使用(xml.document.Element)
getElementByTagName
方法定义在Document.prototype
和Element.prototype
上HTMLDocument.prototype
定义了一些常用的属性,body
,head
分别指代HTML
文档中的<body><head>
标签Document.prototype
上定义了documentElement
属性,指代文档的根元素,在HTML
文档中,他总是指代<html>
元素getElementsClassName
、querySelectorAll
、querySelector在Document.prototype
,Element.prototype
类 中均有定义
增
var div = document.createElement('div');//创建元素节点
var text = document.createTextNode('文本');//创建文本节点
var comment = document.createComment('注释');//创建注释节点
var Frament = document.createDocumentFragment();//创建文档碎片节点
插
parentNode.appendChild(text);
- 若text为新创建的元素,执行appendChild相当于push操作,若为已存在的元素则相当于剪切后再执行push操作
- ·
parentNode.insertBefore(a,b);
- 在b元素之前插入a元素,若a元素是页面中存在的元素,则是先剪切后插入
删
parentNode.removeChild(el);//剪切掉父元素中的el元素,返回剪切掉的元素
child.remove();//销毁自身
替换
parentNode.replaceChild(new,origin);
- 新元素替换旧元素,返回值为旧元素
属性
innerHTML
innerText(老版本火狐不兼容) / textContent(老版本IE不兼容)
实现insertAfter方法
Element.prototype.insertAfter = function(targetNode,afterNode){
var beforeNode = afterNode.nextElementSibling;
if(beforeNode == null){
this.appendChild(targetNode);
}else{
this.insertBefore(targetNode,beforeNode);
}
}