浏览器环境
DOM树
DOM树总共有12种节点类型,实践中一般主要操作其中的4种:
- document节点,访问DOM的入口节点
- element节点,HTML元素
- text节点,包含文本内容
- 注释节点,可以读取注释内容
访问DOM树
DOM树的结构如图所示,可以通过图中的那些引用变量访问DOM树节点:
如果仅仅想访问DOM树中的HTML元素,而不想看到其他的乱七八糟的节点,则如下图所示:
其中,childrenNodes和children都是Collection而不是Array,所以可以通过for.。.of迭代访问,而不能使用.filter(…)这种方法。
DOM树是只读的,不能直接用赋值修改DOM树节点。
搜索DOM树
主要有六种方法可以在DOM树中搜索需要的节点:
Method | Searches by… | Can call on an element? | Live? |
---|---|---|---|
getElementById | id | - | - |
getElementsByName | name | - | ✔ |
getElementsByTagName | tag or ‘*’ | ✔ | ✔ |
getElementsByClassName | class | ✔ | ✔ |
querySelector | CSS-selector | ✔ | - |
querySelectorAll | CSS-selector | ✔ | - |
另外,还有
- elem.matches(css)用于检查elem元素是否匹配css这个选择器
- elem.closest(css)用于寻找匹配css选择器的距离elem最近的祖先
- elemA.contains(elemB)用于检查elemA是否包含elemB
DOM节点类
每一种DOM节点都是一个DOM节点类的实例,DOM节点类的继承树如下图所示:
- Node是所有DOM节点的基类,里面提供了诸如parentNode、nextSibling、childNodes这种getter方法
- HTMLElement是所有HTML元素的基类,各种不同种类的HTML元素都继承了这个基类
要获取node的类型,有很多种方法,比如:
- elem.nodeType,返回一个数字,标记了node的类型
- elem.nodeName/elem.tagname,返回字符串
修改DOM树
innerHTML
可以通过对innerHTML进行修改来修改HTML元素的内容,如下例:
1 | <body> |
outerHTML
可以通过对元素的outerHTML进行替换来替换整个HTML元素,如下例:
1 | <div>Hello, world!</div> |
div.outerHTML仍保持了原先HTML元素内容的引用,但这个元素原先所在的HTML文档的位置被替换成了新的HTML元素。