js/ts getElementById 和 getElementsByClassName 以及 querySelector 和 querySelectorAll的应用详解
案例
假设在ts中,如果我们需要一个HTMLElement
类型的某个dom元素(比如只要第一个),共有如下方式:
(注意ts中需要明确的类型,所以使用as
断言是有必要的,否则在ts识别不出类型时是会报错无法运行的)
1 | // 一、返回值为单个元素的api |
结论
1、通过元素ID获取元素
querySelector('#idName')
- 注意:
传入类名
时前面需要加一个.
(如.className
);传入Id
时前面需要加一个#
(如#idName
) - 返回单个匹配到的Id的元素
- 既可以用于Id, 也可以用作class
- 注意:
document.getElementById('idName')
- 返回单个匹配到的Id的元素
2、通过类名字获取元素
querySelector('.className')
- 注意:
传入类名
时前面需要加一个.
(如.className
);传入Id
时前面需要加一个#
(如#idName
) - 返回
指定 CSS 选择器(className)
的第一个匹配元素 - 既可以用于Id, 也可以用作class
- 注意:
document.getElementsByClassName('className')
- 返回
指定 CSS 选择器(className)
的所有匹配元素, 返回值HTMLCollectionOf<Element>
是一个集合(即数组),泛型所传参数代表了数组内的元素类型(默认为Element)。 - 例如需要第一个匹配元素时:
document.getElementsByClassName('className')[0]
- 返回
document.querySelectorAll('.className')
- 注意:
传入类名
时前面需要加一个.
(如.className
);传入Id
时前面需要加一个#
(如#idName
) - 返回
指定 CSS 选择器(className)
的所有匹配元素, 返回值NodeListOf<E>
是一个集合(即数组),泛型所传参数代表了数组内的元素类型(默认为Element)。 - 例如需要第一个匹配元素时:
document.querySelectorAll('.className')[0]
- 注意:
3、有时也会遇到通过标签名字获取元素的场景(不再本文主题范围内,不过多讨论,自行使用时可参考以上举一反三)
document.getElementsByTagName(tagName)
querySelector与getElementBy等的区别
- 由于querySelector是按css规范来实现的,所以它传入的字符串要按照css标准, 而getElement系列只需要传入具体字符
- query选择符选出来的元素及元素数组是静态的,而getElement这种方法选出的元素是动态的。静态的就是说选出的所有元素的数组,不会随着文档操作而改变.
- 在使用的时候getElement这种方法性能比较好,query选择符则比较方便
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 道远日暮时不存!