> 웹 프론트엔드 > 프런트엔드 Q&A > 자바스크립트에서 DOM 요소를 얻는 방법

자바스크립트에서 DOM 요소를 얻는 방법

青灯夜游
풀어 주다: 2023-01-07 11:46:51
원래의
2320명이 탐색했습니다.

획득 방법: 1. ID 값을 통해 "document.getElementById(value)"를 얻습니다. 2. name 속성을 통해 "document.getElementsByName(value)"을 얻습니다. 3. "부모 노드 object.firstChild"를 얻습니다. 부모 노드 등을 통해 기다리세요.

자바스크립트에서 DOM 요소를 얻는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.

HTML DOM 노드 요소를 얻기 위한 JavaScript 방법 요약

웹 애플리케이션, 특히 Web2.0 프로그램 개발에서는 페이지에서 요소를 얻은 다음 스타일, 콘텐츠를 업데이트해야 하는 경우가 많습니다. , 요소 등. 업데이트할 요소를 구하는 방법이 해결해야 할 첫 번째 문제입니다. 다행스럽게도 JavaScript를 사용하여 노드를 얻는 방법은 여러 가지가 있습니다. 다음은 간략한 요약입니다(다음 방법은 IE7 및 Firefox2.0.0.11에서 테스트되고 전달되었습니다).

1 최상위 수준을 통해

을 얻습니다. 문서 노드( 1) document.getElementById(elementId): 이 방법은 노드의 ID를 통해 필요한 요소를 정확하게 얻을 수 있는 비교적 간단하고 빠른 방법입니다. 페이지에 동일한 ID를 가진 여러 노드가 포함되어 있으면 첫 번째 노드만 반환됩니다. document.getElementById(elementId):该方法通过节点的ID,可以准确获得需要的元素,是比较简单快捷的方法。如果页面上含有多个相同id的节点,那么只返回第一个节点。

如今,已经出现了如prototype、Mootools等多个JavaScript库,它们提供了更简便的方法:$(id),参数仍然是节点的id。这个方法可以看作是document.getElementById()的另外一种写法,不过$()的功能更为强大,具体用法可以参考它们各自的API文档。

(2)document.getElementsByName(elementName):该方法是通过节点的name获取节点,从名字可以看出,这个方法返回的不是一个节点元素,而是具有同样名称的节点数组。然后,我们可以通过要获取节点的某个属性来循环判断是否为需要的节点。

例如:在HTML中checkbox和radio都是通过相同的name属性值,来标识一个组内的元素。如果我们现在要获取被选中的元素,首先获取改组元素,然后循环判断是节点的checked属性值是否为true即可。

(3)document.getElementsByTagName(tagName):该方法是通过节点的Tag获取节点,同样该方法也是返回一个数组,例如:document.getElementsByTagName('A')将 会返回页面上所有超链接节点。在获取节点之前,一般都是知道节点的类型的,所以使用该方法比较简单。但是缺点也是显而易见,那就是返回的数组可能十分庞 大,这样就会浪费很多时间。那么,这个方法是不是就没有用处了呢?当然不是,这个方法和上面的两个不同,它不是document节点的专有方法,还可以应 用其他的节点,下面将会提到。

2、通过父节点获取

(1)parentObj.firstChild:如果节点为已知节点(parentObj)的第一个子节点就可以使用这个方法。这个属性是可以递归使用的,也就是支持parentObj.firstChild.firstChild.firstChild...的形式,如此就可以获得更深层次的节点。

(2)parentObj.lastChild:很显然,这个属性是获取已知节点(parentObj)的最后一个子节点。与firstChild一样,它也可以递归使用。
           在使用中,如果我们把二者结合起来,那么将会达到更加令人兴奋的效果,即:parentObj.firstChild.lastChild.lastChild...

(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

요즘에는 $(id)라는 더 간단한 메소드를 제공하는 프로토타입 및 Mootools와 같은 많은 JavaScript 라이브러리가 등장했으며 매개변수는 여전히 노드의 ID입니다. 이 메소드는 document.getElementById()를 작성하는 또 다른 방법으로 간주될 수 있지만 $()의 기능이 더 강력합니다. 구체적인 사용법은 해당 API 문서를 참조하세요. 🎜🎜(2) document.getElementsByName(elementName): 이 메서드는 이름을 통해 노드를 가져옵니다. 이름에서 알 수 있듯이 이 메서드는 노드 요소가 아니라 동일한 요소를 반환합니다. 이름. 노드 배열. 그런 다음 노드의 특정 속성을 반복하여 필요한 노드인지 확인할 수 있습니다. 🎜🎜예: HTML에서 체크박스와 라디오는 모두 동일한 이름 속성 값을 사용하여 그룹의 요소를 식별합니다. 지금 선택한 요소를 가져오려면 먼저 섞인 요소를 가져온 다음 루프를 통해 노드의 확인된 속성 값이 true인지 확인합니다. 🎜🎜 (3) document.getElementsByTagName(tagName): 이 메서드는 태그를 통해 노드를 가져옵니다. 예를 들어 document.getElementsByTagName('A')는 모든 하이퍼링크를 반환합니다. 페이지의 노드. 노드를 얻기 전에 일반적으로 노드의 유형이 알려져 있으므로 이 방법을 사용하는 것이 비교적 간단합니다. 그러나 단점도 분명합니다. 즉, 반환된 배열이 매우 커서 많은 시간을 낭비할 수 있다는 것입니다. 그렇다면 이 방법은 쓸모가 없는 걸까요? 물론 그렇지 않습니다. 이 방법은 위의 두 가지 방법과 다릅니다. 이는 문서 노드의 고유한 방법이 아니며 아래에서 언급할 다른 노드에도 적용할 수 있습니다. 🎜🎜🎜2. 부모 노드를 통해 🎜🎜🎜을 얻습니다. (1) parentObj.firstChild: 이 방법은 해당 노드가 알려진 노드(parentObj)의 첫 번째 자식 노드인 경우 사용할 수 있습니다. 이 속성은 재귀적으로 사용될 수 있습니다. 즉, parentObj.firstChild.firstChild.firstChild... 형식을 지원하므로 더 깊은 노드를 얻을 수 있습니다. 🎜🎜(2) parentObj.lastChild: 분명히 이 속성은 알려진 노드(parentObj)의 마지막 하위 노드를 가져오는 것입니다. firstChild와 마찬가지로 재귀적으로 사용할 수도 있습니다.
사용 중 두 가지를 결합하면 다음과 같은 더 흥미로운 효과를 얻을 수 있습니다. parentObj.firstChild.lastChild.lastChild...🎜🎜 (3) parentObj.childNodes : Get 알려진 노드의 자식 노드 배열을 찾은 다음 루핑이나 인덱싱을 통해 필요한 노드를 찾습니다. 🎜🎜참고: 테스트 결과 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 라이브러리를 사용하는 경우 노드의 클래스를 통해 가져오는 등 다른 방법을 얻을 수도 있습니다. 그러나 위의 다양한 방법을 유연하게 사용할 수 있다면 대부분의 프로그램을 다룰 수 있을 것이라고 생각합니다.

【추천 학습: javascript 고급 튜토리얼

위 내용은 자바스크립트에서 DOM 요소를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿