节点操作

[ 导语 ]  DOM 提供节点操作的方法,是因为:DOM 节点关系指针都是只读的。


获取页面元素

为什么要获取页面元素?

例如,我们想要操作页面上的某部分(显示/隐藏),需要先获取到该部分对应的元素,才能进行后续操作。


DOM获取节点通常有以下两种方式:

1. 通过节点关系获取节点        // 缺点:可维护性差(一旦节点位置发生变化,就会影响到通过关系获取节点)

2. 通过接口获取节点,主要有以下几个方法:


[1] element = document.getElementById(id)?↓             根据 id 获取元素

element 是一个 Element 对象,如果当前文档中拥有特定 ID 的元素;不存在,则返回null。


[2] collection = element.getElementsByTagName(tagName)?↓             根据标签名获取元素

该方法接收一个参数,即要取得元素的标签名,返回包含0或多个元素的类数组对象HTMLCollection。


[3]collection =element.getElementsByClassName(className)?↓


[4] list = element.querySelector/All(selector)?↓               根据选择器来获取元素


元素的内容?↓

[1] innerHTML & innerText:用于获取开始标签和结束标签之间的内容。区别在于:

  • innerHTML:获取内容的时候,如果内容内容中有标签,也会把标签获取到(原封不动把内容获取到);
  • innerText:获取内容的时候,如果内容中有标签,会把标签过滤掉(会把前后的换行和空白都去掉);

[ 设置标签之间的内容 ]


[2] innerText & textContent:用于获取内部文本,其主要区别在于浏览器的兼容问题。

  • 谷歌:两个都支持
  • 新版的FF:两个都支持
  • 旧版的FF:只支持 textContent
  • 新版的IE(IE9+):两个都支持
  • 旧版的IE:只支持 innerText


动态创建元素

[1] 创建节点?!               element = document.creatElement(tagName)


[2] 插入节点?!

  • 在指定元素后面追加子节点     var achild = element.appendChild(achild);

  • 在指定元素的指定子节点前面添加节点   var achild = element.insertBefore(achild,referenceChild);


[3] 删除节点?!        child = element.removeChild(child)


[4] 其他常用元素操作的方法

  • 替换节点    oldChild.parentNode.replaceChild(newChild, oldChild);

  • 复制节点       list = element.cloneNode( true | false )    boolean值,表示是否执行深复制

cloneNode()不会复制添加到DOM节点中的JS属性,如事件处理等;只复制特性和子节点,其他一切都不会复制。