How to get DOM elements on page
获取Dom元素总体来说有两类方法:
- getElementByXXX
- queryXXX
这两种方法都是从document对象开始查找,所以可以直接使用,不需要先获取document对象。
get方法
getElementById
这是最常用的方法,如果你的元素有id属性,那么可以使用这个方法获取元素,返回的是一个Element对象。如果没有找到,则返回null。
html代码:
1 | <div id="root"></div> |
js代码:
1 | const element = document.getElementById('root'); |
getElementsByClassName
这个方法可以获取到所有class属性中包含指定类名的元素,返回的是一个array-like
对象HTMLCollection,可以使用Array.from()方法将其转换为数组。
html代码:
1 | <div class="container"></div> |
js代码:
1 | const elements = document.getElementsByClassName('container'); |
需要注意的是,这个方法返回的是一个动态的集合,也就是说,如果你在获取到元素之后,再向页面中添加或者删除元素,那么这个集合也会跟着改变。
1 | <body> |
query方法
query类的方法参数是CSS选择器,比如
- “#root” - 查找id为root的结点,
- “.container” - 查找class为container的结点,
- “div” - 查找所有div结点。
querySelector
这个方法可以获取到第一个匹配的元素,它的返回值类型是Element。如果没有匹配的元素,返回null。
1 | <div class="container"></div> |
js代码:
1 | const element = document.querySelector('.container'); |
querySelectorAll
这个方法可以获取到所有匹配的元素,返回的是一个类数组对象NodeList,可以使用Array.from()方法将其转换为数组。
1 | <div class="container"></div> |
js代码:
1 | const elements = document.querySelectorAll('.container'); |
querySelectorAll方法返回的是一个静态的集合,也就是说,如果你在获取到元素之后,再向页面中添加或者删除元素,那么这个集合不会跟着改变。
需要注意的是,尽管querySelectorAll方法返回的NodeList是静态的,但是NodeList在有些情况下却是动态的,比如 Node.childNodes
返回的就是一个动态的NodeList。
总结成如下表格
方法 | 返回值类型 | 返回值个数 | 查不到时返回值 | 返回值状态:动态/静态 |
---|---|---|---|---|
getElementById | Element | 1 | null | - |
getElementsByClassName | HTMLCollection(Array-like object) | 0~n | 空的HTMLCollection | 动态 |
querySelector | Element | 1 | null | - |
querySelectorAll | NodeList(Array-like object) | 0~n | 空的NodeList | 静态 |
References
getElementById
getElementsByClassName
querySelector
querySelectorAll