H5中DOM对象查找节点的方式归纳

在h5中,经常需要修改某个元素节点的样式,内容等,如何找到对应的元素,是首先要解决的问题。

getElementsByTagName方法

这个方法来返回页面上所有包含tagName等于某个指定值的元素对象的集合,当得到相应的节点集合以后,就可以去访问某个子节点。

var eles = document.getElementsByTagName('img')

节点对象在DOM中定义为Node对象,Node对象定义了一些属性方法,如下:

属性/方法 返回类型 具体描述
innerHTML String 表示当前节点的内部标签
innerText String 表示当前节点的文字内容
length Number 返回NodeList中的节点数
nodeName String 节点名称,根据节点的类型而定义
nodeValue String 节点的值,根据节点的类型而定义
nodeType Number 节点的类型常量值之一
firstChild Node 指向在childNodes节点集合中的第一个节点
lastChild Node 指向在childNodes节点集合中的最后一个节点
parentNode Node 指向所在节点的父节点
childNode NodeList 指向所在节点的父节点
previousSibling Node 指向前一个兄弟节点,如果当前节点本身就是第一个兄弟节点,则返回null
nextSibling Node 指向后一个兄弟节点,如果当前节点是最后一个兄弟节点的话,返回null
hasChildNodes() Boolean 是否包含一个或多个子节点
AppendChild(node) Node 将node添加到childNodes的末尾
removeChild(node) Node 从childNodes中删除node
replaceChild(newnode,oldnode) node 将childNodes中oldnode替换成newnode
insertBefore(newnode,refnode) Node 在childNodes中在refnode之前插入newnode
cloneNode(deep) Node deep为true是深复制,复制当前的节点以及子节点,false为浅复制,只复制当前节点
getElementsById

根据绑定的id返回一个唯一的元素节点

var el = document.getElementById('myId');
getElementsByClassName

通过类名获取相同class名的元素节点

var elems = document.getElementsByClassName('box');
querySelectorAll

返回页面所有匹配css选择器的元素节点对象集合

var elems = document.querySelectAll('.box');
querySelector

这个只会返回匹配选择器的第一个元素节点对象,而querySelectorAll返回的是所有匹配的元素节点对象的集合。

2、处理属性

对于元素节点,DOM提供了三个方法来处理其属性。

getAttribute(name):获取某个属性的值
var ele = document.getElementById('myBox');
ele.getAttribute('class'); //打印id名为myBox的类名
setAttribute(name,newValue):设置某个属性的值
var ele = document.getElementById('myBox');
ele.setAttribute('class','myStyle); 
removeAttribute(name):移除某个属性
var ele = document.getElementById('myBox');
ele.removeAttribute('class'); 

3、读取和设置内容

innerText

在通过innerText属性操作元素所包含的文本内容时,它会按照由浅入深的顺序,将子文档树中所有文本拼接起来。

注意一点的是:在使用innerText和innerHTML为元素对象设置内容时,会先将对象开始标签和结束标签之间的内容全清空。

innerHTML

用于获取标签对象起始和结束标签内的代码

var oDiv = document.getElementById('myId');
oDiv.innerHTML = `<img src='./img.png'>` //展示为一张图片显示出来

4、创建和操作元素节点

DOM元素节点还可以进行一系列的增、删、替换的操作。

创建新的dom元素节点

有几种不同的方法去创建不同类型的节点

方法 具体描述
createTextNode(text) 创建包含文本text的文本节点
createElement(tagName) 创建标签为tagName的HTML元素节点
createDocumentFragment() 创建文档碎片节点
使用createElement、createTextNode、AppendChild

先创建div元素,然后创建一个新的节点p标签元素节点,然后将元素追加至div中

var oDiv = document.createElement('div');
oDiv.setAttribute('id','my-div');//设置id
var oP = document.createElement('p');
var oText = document.createTextNode('新增的文本');
oP.AppendChild(oText);
oDiv.AppendChild(oP);
document.body.AppendChild(oDiv); 

所有的DOM操作必须在页面完全载入后才能进行,当页面正在载入时,要向DOM插入相关节点是不可能的,因为DOM树还没有构建完成。

5、动态的删除元素节点

removeChild方法可以接受一个参数,代表要删除的节点对象,返回值也是这个节点对象,动态的删除节点时,需要利用parentNode的特性确保能够访问到它真正的父元素节点去删!直接删除是获取不到那个元素的

var oDiv = document.getElementById('child');
oDiv.parentNode.removeChild(oDiv);

6、替换节点

如果想要将节点替换成一个新的节点,则需要使用replaceChild方法,replaceChild方法有两个参数,被添加的节点对象和被替换的节点对象

var oList = document.getElementById('dataList');
var oLi = document.querySelector('#dataList li'); //返回的是第一个li元素
var nLi = document.createElement('li');
nLi.innetText('new Node');
oList.replaceChild(nLi,oLi);//第一个是被添加的对象,后面的是被替换掉的对象
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容