JavaScript获取DOM节点的核心方法总结

作者:窗边听雨

时间:2026-10-24

浏览:338

本文系统总结了JavaScript中获取DOM节点的各种方法,涵盖通过ID、Name、标签名定位元素,以及利用firstChild、childNodes、parentNode等属性进行层级遍历的技巧。内容对比了不同浏览器下的行为差异,并简要提及了常用JS库的封装用法,旨在帮助开发者灵活运用基础API解决节点查找问题。

文章目录

在Web开发中,首要任务是准确定位需要更新的DOM元素。幸运的是,JavaScript提供了多种获取节点的方式。以下总结的方法已在IE7和Firefox 2.0.0.11环境中验证通过,可作为基础参考。


        1. 通过顶层document节点获取:

通过顶层document节点获取

1. 通过顶层document节点获取:

document.getElementById(elementId):

(1)通过ID定位:该方法利用节点的ID属性精准获取目标元素,操作简便且高效。需注意,若页面中存在多个相同ID的节点,该方法仅返回第一个匹配的元素。


(2)通过Name定位:此方法依据节点的name属性返回一个包含所有同名节点的数组。由于返回的是集合,我们需要遍历该数组,通过检查特定属性(如checked)来筛选出目标节点。例如,在处理checkbox或radio组时,先获取同name属性的所有元素,再循环判断其checked属性是否为true,即可找到被选中的元素。

$(id)

(3)通过标签名(Tag)定位:该方法返回一个包含所有指定标签元素的数组。虽然获取前通常已知标签类型,操作直观,但其缺点在于返回的数组可能极其庞大,导致性能开销较大。值得注意的是,该方法并非document节点的专属,也可应用于其他节点对象,下文将具体说明。

document.getElementById()

此外,现代JavaScript库(如Prototype、Mootools等)提供了更简洁的封装方法。例如,使用$()函数,参数仍为节点ID。这可视作document.getElementById()的简化写法,但$()功能更为强大,具体实现细节建议参考各库的官方API文档。

$()

通过父节点获取子节点

2. 通过父节点获取子节点:


(1)firstChild属性:若已知父节点(parentObj),可通过此属性获取其第一个子节点。该属性支持链式调用,例如parentObj.firstChild.firstChild...,从而深入获取多层级的子节点。

document.getElementsByName(elementName):

(2)lastChild属性:用于获取父节点的最后一个子节点,同样支持递归链式调用,用法与firstChild类似。


(3)结合使用:将firstChild与lastChild结合,如parentObj.firstChild.lastChild...,可实现更复杂的节点定位,达到更灵活的效果。


(4)childNodes属性:获取父节点的所有子节点数组,随后可通过索引或循环查找目标节点。需注意浏览器差异:在IE7中,该属性仅返回直接子节点;而在Firefox 2.0.0.11中,它返回所有后代节点(包括子节点的子节点)。

document.getElementsByTagName(tagName)

(5)children属性:获取父节点的直接子节点数组。经测试,在IE7中其效果与childNodes一致,但Firefox 2.0.0.11不支持此属性。鉴于兼容性差异,建议谨慎使用或避免依赖此方法。

document.getElementsByTagName('A')

(6)getElementsByTagName(tagName):在已知节点上调用此方法,返回所有指定类型的子节点数组。例如,parentObj.getElementsByTagName('A')将返回该父节点下所有的超链接元素。


        2、通过父节点获取:

通过临近节点获取

3. 通过临近节点获取:

parentObj.firstChild

(1)previousSibling:获取已知节点(neighbourNode)的前一个兄弟节点。与firstChild和lastChild一样,该属性支持递归链式调用。

parentObj.firstChild.firstChild.firstChild...

(2)nextSibling:获取已知节点的下一个兄弟节点,同样支持递归操作。


4. 通过子节点获取父节点:

parentObj.lastChild

通过子节点获取父节点

(1)parentNode:直接获取已知节点(childNode)的父节点引用。


上述方法涵盖了DOM节点获取的基本场景。若项目中使用了Prototype等JavaScript库,还可能通过class等其他属性进行更高级的节点查找。只要灵活运用上述基础方法,通常足以应对大多数程序开发中的节点定位需求。


(3)

parentObj.childNodes

:获取已知节点的子节点数组,然后可以通过循环或者索引找到需要的节点。


          注意

:经测试发现,在IE7上获取的是直接子节点的数组,而在Firefox2.0.0.11上获取的是所有子节点即包括子节点的子节点。


(4)

parentObj.children

:获取已知节点的直接子节点数组。


          注意

:经测试,在IE7上,和childNodes效果一样,而Firefox2.0.0.11不支持。这也是为什么我要使用和其他方法不同样式的原因。因此不建议使用。


(5)

parentObj.getElementsByTagName(tagName)

:使用方法不再赘述,它返回已知节点的所有子节点中类型为指定值的子节点数组。例如:

parentObj.getElementsByTagName('A')返回已知的子节点中的所有超链接。
   3、通过临近节点获取:
     (1)neighbourNode.previousSibling:获取已知节点(neighbourNode)的前一个节点,这个属性和前面的firstChild、lastChild一样都似乎可以递归使用的。
     (2)neighbourNode.nextSibling:获取已知节点(neighbourNode)的下一个节点,同样支持递归。
   4、通过子节点获取:
     (1)childNode.parentNode:获取已知节点的父节点。

   上面提到的方法,只是一些基本的方法,如果使用了Prototype等JavaScript库,可能还获得其他不同的方法,例如通过节点的class获取等等。不过,如果能够灵活运用上面的各种方法,相信应该可以应付大部分的程序

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章