>  기사  >  웹 프론트엔드  >  자바스크립트에서 다양한 DOM 노드를 얻는 방법 소개

자바스크립트에서 다양한 DOM 노드를 얻는 방법 소개

伊谢尔伦
伊谢尔伦원래의
2017-07-18 15:37:201719검색

웹 애플리케이션, 특히 Web 2.0 프로그램 개발에서는 페이지에서 요소를 얻은 다음 해당 요소의 스타일, 콘텐츠 등을 업데이트해야 하는 경우가 많습니다.

1. 최상위 문서 노드를 통해 얻기:
                          (1) document.getElementById(elementId): 이 방법은 비교적 간단하고 빠른 노드의 ID를 통해 필요한 요소를 정확하게 얻을 수 있습니다. 방법. 페이지에 동일한 ID를 가진 여러 노드가 포함되어 있으면 첫 번째 노드만 반환됩니다.如 오늘날 Prototype 및 Mootools와 같은 많은 JavaScript 라이브러리가 등장했습니다. 이들은 더 쉬운 방법인 $(ID)를 제공하며 매개변수는 여전히 노드의 ID입니다. 이 메소드는 document.getElementById()를 작성하는 또 다른 방법으로 간주될 수 있지만 $()의 기능이 더 강력합니다. 구체적인 사용법은 해당 API 문서를 참조하세요.
             (2) document.getElementsByName(elementName): 이 메소드는 노드의 이름을 통해 노드를 가져옵니다. 이름에서 알 수 있듯이 이 메소드는 노드 요소가 아니라 동일한 이름을 가진 노드의 배열을 반환합니다. 그런 다음 노드의 특정 속성을 반복하여 필요한 노드인지 확인할 수 있습니다.
                                                                                                    동일한 이름 속성 값을 사용하여 그룹의 요소를 식별합니다. 지금 선택한 요소를 가져오려면 먼저 섞인 요소를 가져온 다음 루프를 통해 노드의 확인된 속성 값이 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: 알려진 노드의 배열을 가져옵니다. 그런 다음 루핑이나 인덱싱을 통해 필요한 노드를 찾을 수 있습니다.
참고: 테스트 후 IE7에서는 직접 하위 노드의 배열을 얻은 반면, Firefox2.0.0.11에서는 하위 노드의 하위 노드를 포함한 모든 하위 노드를 얻은 것으로 나타났습니다.
       (4) parentObj.children: 알려진 노드의 직접 하위 노드 배열을 가져옵니다.
참고: 테스트 후 IE7에서는 childNodes와 효과가 동일하지만 Firefox2.0.0.11에서는 지원하지 않습니다. 이것이 제가 다른 방법들과 다른 스타일을 사용하는 이유입니다. 따라서 사용을 권장하지 않습니다.
        (5) parentObj.getElementsByTagName(tagName): 사용법은 자세히 설명하지 않습니다. 알려진 노드의 모든 하위 노드 중 지정된 값의 하위 노드 배열을 반환합니다. 예를 들어 parentObj.getElementsByTagName('A')는 알려진 하위 노드의 모든 하이퍼링크를 반환합니다.

3. 인접 노드를 통해 획득:
         (1) neighborNode.previousSibling: 알려진 노드(neighbourNode)의 이전 노드를 가져옵니다. 이 속성은 이전 firstChild 및 lastChild와 마찬가지로 재귀적으로 사용되는 것 같습니다.  (2) neighborNode.nextSibling: 알려진 노드(neighbourNode)의 다음 노드를 가져오고 재귀도 지원합니다.

4. 하위 노드를 통해 획득:
​​​​​ (1) childNode.parentNode: 알려진 노드의 상위 노드를 가져옵니다. 위에서 언급한 방법은 단지 몇 가지 기본 방법일 뿐입니다. Prototype과 같은 JavaScript 라이브러리를 사용하는 경우 노드의 클래스를 통해 가져오는 등 다른 방법을 얻을 수도 있습니다. 하지만 위의 다양한 방법을 유연하게 사용할 수 있다면 대부분의 프로그램을 처리할 수 있을 것이라고 생각합니다

작업 코드:

<table> 
<tr> 
<td id="TEST"> 
<input type="submit" value="确定"> 
<input type="button" value="取消"> 
</td> 
</tr> 
</table>

테스트됨:

var td= document.getElementById("TEST"); 
alert(td.childNodes.length);结果为4

JS中,空格也是作为一个文本节点,而两个input元素后面都有空格 
所以都作为一个文本节点,所以结果为4 
删除空格后结果为2 
为了处理里面的空格节点,用以下函数来处理 

function cleanWhitespace(element) 
{ 
for(var i=0; i<element.childNodes.length; i++) 
{ 
var node = element.childNodes[i]; 
if(node.nodeType == 3 && !/\S/.test(node.nodeValue)) 
{ 
node.parentNode.removeChild(node); 
} 
} 
}

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.