如何通过id获取元素?原生js根据id获取元素的方法
- 虚拟主机
- 2026-06-27
- 8
在原生 JavaScript 中,通过 ID 获取 DOM 元素是最基础且最高频的操作之一,由于 ID 在 HTML 文档中必须是唯一的,因此通过 ID 获取元素通常能直接定位到目标节点,无需遍历整个文档树,性能相对较好,以下将详细解析几种常用的原生方法及其特性。
document.getElementById()
这是最经典、兼容性最好且语义最明确的方法,它返回一个 Element 对象,如果文档中没有该 ID 的元素,则返回 null。
- 语法:document.getElementById(id)
- 返回值:Element 对象或 null。
- 特点:
- 全局唯一性:假设 ID 重复,它只返回第一个匹配的元素。
- 性能:在现代浏览器中,由于 ID 查找通常由底层引擎优化(如哈希表查找),速度非常快。
- 兼容性:支持所有浏览器,包括极老的 IE 版本。
document.querySelector()
这是一种更通用的选择器方法,它接受 CSS 选择器字符串作为参数,虽然它主要用于获取单个元素,但通过传入 #id 前缀,也可以实现通过 ID 获取元素的功能。
- 语法:document.querySelector('#id')
- 返回值:匹配的第一个 Element 对象,若无匹配则返回 null。
- 特点:
- 灵活性:除了 ID,还可以使用类名、属性选择器等。
- 性能:在处理复杂选择器时可能比 getElementById 稍慢,因为浏览器需要解析 CSS 选择器规则,但在简单 ID 查找中,性能差异通常可忽略不计。
- 现代性:属于 DOM Level 3 Selectors API,不支持 IE8 及以下版本。
document.querySelectorAll()
该方法返回所有匹配 CSS 选择器的元素,封装在一个 NodeList 中,虽然 ID 应该是唯一的,但使用此方法获取 ID 元素会返回一个包含单个元素的列表(ID 重复,则包含多个)。
- 语法:document.querySelectorAll('#id')
- 返回值:NodeList 对象(静态集合)。
- 特点:
- 返回集合:即使只找到一个元素,也返回 NodeList,需要索引访问(如 [0])。
- 适用场景:当你不确定 ID 是否唯一,或者希望统一使用选择器 API 风格时使用。
- 注意:ID 确实重复(非法 HTML),它会返回所有匹配项。
为了更清晰地展示各方法的差异,以下是关键特性的对比表格:


| 特性 | getElementById() | querySelector('#id') | querySelectorAll('#id') |
|---|---|---|---|
| 返回值类型 | Element 或 null | Element 或 null | NodeList |
| 性能 | 最快(底层优化) | 快(略慢于 getElementById) | 较慢(需构建列表) |
| 兼容性 | 极佳(IE6+) | 良好(IE9+) | 良好(IE9+) |
| 语义明确性 | 高(专为 ID 设计) | 中(通用选择器) | 中(通用选择器) |
| ID 重复处理 | 返回第一个 | 返回第一个 | 返回所有匹配项 |
| 推荐场景 | 已知唯一 ID,追求性能 | 混合使用多种选择器 | 需要批量处理或不确定唯一性 |
最佳实践建议
- 优先使用 getElementById:如果你明确知道要获取的是一个唯一 ID 的元素,getElementById 是性能最优、语义最清晰的选择。
- 避免在 ID 上使用 querySelectorAll:除非你有特殊需求(如处理非法的重复 ID),否则这会引入不必要的开销和复杂性。
- 注意空值检查:无论使用哪种方法,获取元素后都应检查返回值是否为 null,以避免后续操作报错。
- DOM 加载时机:确保在 DOM 树构建完成后执行获取操作,通常将脚本放在 </body> 之前,或使用 DOMContentLoaded 事件监听器。
相关问题与解答
问题 1:为什么在现代开发中,有时推荐使用 querySelector 而不是 getElementById?

解答:虽然 getElementById 性能略优,但在现代前端开发中,开发者往往更倾向于使用 querySelector 或 querySelectorAll,主要原因如下:
- API 一致性:使用 CSS 选择器可以统一获取元素的方式,无论是通过 ID、类名、属性还是伪类,都使用相同的 API,减少了记忆负担。
- 灵活性:在实际项目中,经常需要根据动态生成的类名或属性来获取元素,querySelector 能更好地适应这种需求。
- 性能差异微乎其微:在现代浏览器中,querySelector('#id') 的性能优化已经非常好,与 getElementById 的差异在绝大多数应用场景下可以忽略不计,只有在极端高性能要求的场景下,才需要刻意选择 getElementById。
问题 2:HTML 中存在两个相同的 ID,getElementById 和 querySelector 会返回什么?
解答:
- getElementById:根据 HTML 规范,ID 应该是唯一的,如果存在重复 ID,getElementById 会返回文档中第一个出现的具有该 ID 的元素。
- querySelector:同样,它会返回文档中第一个匹配 CSS 选择器 #id 的元素。
- querySelectorAll:则会返回一个包含所有具有该 ID 的元素的 NodeList。
需要注意的是,重复 ID 是无效的 HTML,会导致不可预期的行为,应避免在生产环境中使用。