一、节点
- 文本节点,IE8以下空格节点获取不到。
- 元素节点
div
。
- 属性节点
class
、id
、value
。
- 注释节点
<div id="wrap">
<div class="position">
<div id="box" class="box1" data-title="这也是节点" abc="133">
<!-- <div>
<img src="1.jpg" />
</div> -->
你好吗!!!
<span id="my-span">这是个span</span>
<p>这是一个p标签</p>
<ul>
<li>这是li标签1</li>
<li>这是li标签2</li>
<li>这是li标签3</li>
</ul>
</div>
<div id="box2"></div>
</div>
</div>
二、获取节点
- 获取子代节点(动态获取)。
ele.childNodes
:文本节点、元素节点。ele.children
:只获取元素节点。
- 获取第一个子代节点。
ele.firstChild
:返回第一个包括文本节点和注释节点。ele.firstElementChild
:获取第一个元素节点。
- 获取最后一个子代节点。
ele.lastChild
:获取到文本和注释节点。ele.lastElementChild
:获取最后一个元素节点。
- 获取父亲节点。
ele.parentNode
:获取父亲节点。ele.offsetParent
:找到定位父级。
- 下一个兄弟节点。
ele.nextSibling
:获取到下一个节点,包括文本、注释节点。ele.nextElementSibling
:只获取元素节点。
- 上一个兄弟节点。
ele.previousSibling
:获取到下一个节点,包括文本、注释节点。ele.previousElementSibling
:只获取元素节点。
- 获取子元素节点的数量。
ele.childElementCount
。
三、节点的操作
- 创建节点:
document.createElement('nodename')
,放标签名,创建元素节点,创建节点是document的方法,创建完的节点可以直接进行dom操作。
- 创建文本节点:
createTextNode
。
- 删除节点:
parentNode.removeChild(node)
,删除节点只能从父级开始删除,不能自己删除自己。
- 克隆节点:
cloneNode()
,克隆只克隆元素本身还有元素节点,不会克隆事件,可以接受一个布尔类型,若是true,则克隆子孙元素。
- 添加节点:
parentNode.appendChild(node)
,只能从父级节点开始添加,添加位置在最后的子节点后面。
- 替换节点:
parentNode.replaceChild(new, old)
,第一个用来替换新元素,第二个被替换元素。
- 在节点前添加节点:
parentNode.insertBefore(new, old)
,第一个用来插入的新元素,第二个在这个元素前插入。
var oBox = document.getElementById('box'),
oSpan = document.getElementById('my-span');
oBox.onclick = function(){
alert(1)
}
var oBox2 = oBox.cloneNode(true);
wrap.appendChild(oBox2);
console.log(oBox2)
var oP = document.createElement('p');
oP.innerHTML = '我是一个p标签';
oP.onclick = function() {
alert('我是p标签的点击事件')
}
oBox.appendChild(oP);
var oText = document.createTextNode('我很好!!!');
oBox.appendChild(oText);
console.log(oText)
四、节点属性
- 获取节点属性。
ele.getAttribute(key)
,节点名称,直接返回值。ele.getAttributeNode
,返回节点对象。
- 设置节点属性。
ele.setAttribute(key, value)
,不要用数字来当做key。ele.setAttributeNode(node)
,node是一个节点对象。
- 创建节点对象。
document.createAttribute("nodeName")
,创建完之后要设置value值。
- 删除节点对象。
ele.removeAttribute(key)
- 节点类型。1--element--元素节点、3--#text--文本节点、8--#comment--注释节点、9--document--文档节点。
- tagName是只有元素节点才有,nodeName是所有节点都有。
var oBox = document.getElementById('box');
oBox.removeAttribute('abc');
console.log(document.nodeType);