js-DOM 개발자라면 다음 DOM 메소드를 알아야 합니다.
1, 노드를 생성합니다.
createElement():
var a = document.createElement(“p”);
요소 노드를 생성하므로 nodeType은 1입니다.
a.nodeName은 p를 반환합니다.
createElement() 메서드로 생성된 새 요소 노드는 문서에 자동으로 추가되지 않습니다. 자유로운 상태에서. 따라서 nodeParent 속성도 없습니다.
문서에 추가하려면appendChild(), insertBefore() 메서드 또는 replacementChild() 메서드를 사용할 수 있습니다. 물론 이전 예에서는 insertAfter() 메서드를 직접 작성했습니다.
예:
var a = document.createElement(“p”)
document.body.appendChild(a);
참고: appendChild()는 기본적으로 문서 끝에 추가됩니다. 즉, lastChild 하위 노드입니다.
어딘가에 추가하고 싶다면 insertBefore()를 사용하면 됩니다.
요소를 삽입하기 전에 요소에 속성을 추가하려는 경우. 다음과 같이 할 수 있습니다.
var a = document.createElement(“p”);
a.setAttribute(“title”,”my 데모”)
document.body.appendChild(a); 🎜 >
createTextNode():
var b = document.createTextNode(“my deco”)
텍스트 노드를 생성하므로 nodeType은 3입니다.
b.nodeName은 #text를 반환합니다.
createElement()와 마찬가지로 createTextNode()로 생성된 노드는 문서에 자동으로 추가되지 않습니다. AppendChild(), insertBefore() 메서드 또는 replacementChild() 메서드를 사용해야 합니다.
createElement()와 함께 자주 사용되는데, 그 이유를 아시나요? (요소 노드, 텍스트 노드.)
var mes = document.createTextNode(“hello world”);
var 컨테이너 = document.createElement(“p”)
container.appendChild(mes) ;
document.body.appendChild(container)
2, 노드를 복사합니다.
cloneNode(boolean) :
매개변수가 하나 있습니다.
var mes = document.createTextNode("hello world");
var 컨테이너 = document.createElement("p")
container.appendChild(mes)
document.body.appendChild( 컨테이너);
var newpara = 컨테이너.cloneNode(true);//참과 거짓의 차이
document.body.appendChild(newpara)
참고:
참: < p>aaaa
false:
만 복제하고 내부 텍스트는 복제되지 않습니다.
예제를 직접 작성한 다음 Firebug를 사용하여 확인해 볼 수 있습니다.
createTextNode()와 같이 복제 후 새 노드는 문서에 자동으로 삽입되지 않습니다. AppendChild()가 필요합니다.
또 다른 참고 사항: 복제 후 ID가 동일하면 setAttribute(“id”, “another_id “)
를 사용하여 새 노드의 ID를 변경하는 것을 잊지 마세요.
3, 노드를 삽입합니다.
appendChild():
요소에 하위 노드를 추가하고 끝에 새 노드를 삽입합니다.
var 컨테이너 = document.createElement("p");
var t = document.createTextNode("cssrain")
container.appendChild(t)
document.body.appendChild(컨테이너 );
createElement(), createTextNode() 및 cloneNode()와 함께 자주 사용됩니다.
또한,appendChild()는 새 요소를 추가하는 데 사용할 수 있을 뿐만 아니라 문서의 기존 요소를 이동하는 데에도 사용할 수 있습니다.
아래 예를 살펴보세요.
msg
content
p id="aaa">aaaaaaa
<script> <br>var mes = document.getElementById("msg") <br>var 컨테이너 = document.getElementById("content"); <br> Container.appendChild(mes); <br></script>
//msg가 콘텐츠 뒤에 있는 것을 발견했습니다.
Js 내부 처리 방법:
먼저 문서에서 ID msg인 것을 삭제한 후, content의 마지막 노드로 content 뒤에 삽입합니다.
결과는 다음과 같습니다.
content
msg
aaaaaaaa
insertBefore() :
이름에서 알 수 있듯이 대상 노드 앞에 새 노드를 삽입합니다.
Element.insertBefore( newNode , targerNode );
두 번째 매개변수는 선택사항입니다. 두 번째 매개변수를 작성하지 않으면 기본적으로 문서 끝에 추가됩니다. ();
insertBefore()가 어떻게 사용되는지 살펴보겠습니다:
1111
msg
테스트
222
🎜><script> <br>var msg = document.getElementById("msg") <br>var aaa = document.getElementById("aaa") <br>var test = document.getElementById("cssrian") ; <br>test.insertBefore( msg , aaa ); <br></script>
// aaa 앞에 msg의 ID가 삽입된 것을 확인했습니다.
Js의 내부 처리 방식은appendChild()와 유사합니다.
4, 노드를 삭제합니다.
removeChild() :
a
< ;p id="b">b
c
<script> <br>var msg = document.getElementById("cssrain") <br>var b = document.getElementById("b") <br> msg.removeChild(b); <br>삭제할 노드의 상위 노드가 무엇인지 모른다면? parentNode 속성을 사용할 수 있습니다. <br>예: <br><body> <br> <p id="cssrain"> <br> <p id="a">a <br> < p id="b">b </p> <br> <p id="c">c </p> <br> </p> 🎜 ><script> <br>var b = document.getElementById("b") <br>var c = b.parentNode; <br></script> 🎜 >
참고: 노드를 한 위치에서 다른 위치로 이동하려는 경우에는 RemoveChild()를 사용할 필요가 없습니다.
이전의appendChild()와 insertBefore()를 사용할 수 있는데, 자동으로 노드를 먼저 삭제한 다음 지정한 위치로 이동합니다. ,
5, 노드를 교체하세요.
Element.repalceChild( newNode , oldNode )
OldNode는 Element의 하위 노드여야 합니다.
a
b
c
<script> <br>var cssrain = document.getElementById("cssrain"); <br>var msg = document.getElementById("b"); <br>var para = document.createElement("p") <br>cssrain. replacementChild( para , msg ); <br></script>
6, 속성 노드를 설정/가져옵니다.
setAttribute();//Set
예:
var a = document.createElement(“p”)
a.setAttribute(“title”,”my 데모”); 이전에 title 속성이 있었는지 여부에 관계없이 미래 가치는 내 데모입니다.
getAttribute();//Get
예:
var a =document.getElementById(“cssrain”)
var b = a.getAttribute(“title”); > 얻을 때 속성이 존재하지 않으면 빈 값을 반환합니다. ie와 ff의 반환은 다릅니다. 이전 예를 볼 수 있습니다.
반품은 다르지만 하나의 방법으로 판단할 수 있습니다.
if(a.getAttribute(“title”)){ }
7, 노드를 찾습니다.
getElementById();
nodeName, nodeType, parentNode, ChildNodes 등과 같은 속성이 있는 객체를 반환합니다.
getElementsByTagName()은 태그 이름의 모든 요소를 찾습니다.
컬렉션을 반환하며 루프를 사용하여 각 객체를 꺼낼 수 있습니다. 객체에는 nodeName, nodeType, parentNode, ChildNodes 등과 같은 속성이 있습니다.
예:
var ps = document.getElementsByTagName(“p”)
for(var i=0; i< ps.length; i){
ps[i].setAttribute(“ title","안녕하세요");
//다음을 사용할 수도 있습니다: ps.item(i).setAttribute("title","hello");
}
hasChildNodes:
이름으로 알 수 있습니다. , 요소에 하위 노드가 있는지 여부를 판단합니다.
부울 유형을 반환합니다.
텍스트 노드와 속성 노드는 하위 노드를 가질 수 없으므로 hasChildNodes는 항상 false를 반환합니다.
hasChildNodes는 종종 childNodes와 함께 사용됩니다.
예:
a
< p id="b">b
c
🎜 ><script> <br>var ps = document.getElementById("cssrain") <br>if(ps.hasChildNodes){ <br> 경고( ps.childNodes.length ); ; /script> <br><br>8, DOM 속성: <br>nodeName 속성: 노드의 이름입니다. <br>노드가 요소 노드인 경우 요소 이름을 반환합니다. 이때는 tagName 속성과 동일합니다. <br>예: <br><p>aaaa</p> 그러면 p 가 반환됩니다. <br>속성 노드인 경우 nodeName은 이 속성의 이름을 반환합니다. <br>텍스트 노드인 경우 nodeName은 #text 문자열을 반환합니다. <br><br>또 말씀드리고 싶은 점은 nodeName 속성은 읽기 전용 속성이므로 설정(쓰기)할 수 없다는 것입니다. <br><br>nodeType 속성: 이 노드의 유형을 나타내는 정수를 반환합니다. <br>우리는 일반적으로 3가지 유형을 사용합니다. <br>nodeType == 1 : Element 노드 <br>nodeType == 2 : Attribute 노드 <br>nodeType == 3 : Text 노드 <br> 기억하고 싶다면 위의 내용을 기억하세요. 순서는 앞에서 뒤로라고 생각하시면 됩니다. <br>예: <p title="cssrain" >test</p> 앞에서 뒤로 읽으면 먼저 요소 노드, 그 다음 속성 노드, 마지막으로 텍스트 노드가 있음을 알 수 있으므로 쉽습니다. 기억해두세요 nodeType은 어떤 유형을 나타냅니까? <br><br>nodeType 속성은 잘못된 노드 유형에서 잘못된 작업이 수행되지 않도록 하기 위해 if와 함께 사용되는 경우가 많습니다. <br>예: <br>function cs_demo(mynode){ <br> if(mynode.nodeType == 1){ <br> mynode.setAttribute("title","demo") <br> } <br> } <br> 코드 설명: 먼저 mynode의 nodeType 속성을 확인하여 그것이 나타내는 노드가 실제로 요소 노드인지 확인하세요. <br>nodeName 속성과 마찬가지로 읽기 전용 속성이므로 설정(쓰기)할 수 없습니다. <br><br><br><br>nodeValue 속성: 이 노드의 값인 문자열을 반환합니다. <br>노드가 요소 노드인 경우 null이 반환됩니다(아래 참고). <br>속성 노드인 경우 nodeValue는 이 속성의 값을 반환합니다. <br>텍스트 노드인 경우 nodeValue는 이 텍스트 노드의 콘텐츠를 반환합니다. <br>예: <br><p id="c">aaaaaaaaaaaaaaa</p> <br><SCRIPT LANGUAGE="JavaScript"> <br> var c= document.getElementById("c" ) ; <br> Alert( c.nodeValue );//Return null <br></SCRIPT>
nodeValue는 읽고 쓸 수 있는 속성입니다. 그러나 요소 노드의 값은 설정할 수 없습니다.
아래 예를 살펴보세요.
aaaaaaaaaaaaaaa
물론 올바른 작동을 보장하기 위해 다음 코드를 추가할 수 있습니다.
< ;p id="c ">aaaaaaaaaaaaa
//요소 노드를 설정하려면 직접 설정할 수는 없지만 먼저 firstChild나 lastChild 등을 사용한 후 nodeValue를 설정해야 한다고 볼 수 있습니다.
nodeValue는 일반적으로 노드를 설정할 때만 사용됩니다. 텍스트 노드의 값입니다. 속성 노드의 값을 새로 고치려면 일반적으로 setAttribute()를 사용합니다.
childNodes 속성: 요소 노드의 하위 노드로 구성된 배열을 반환합니다.
텍스트 노드와 속성 노드는 더 이상 하위 노드를 포함할 수 없으므로
해당 childNodes 속성은 항상 빈 배열을 반환합니다.
요소에 하위 노드가 있는지 확인하는 데 사용되는 hasChildNodes 메서드를 사용할 수 있습니다.
또는 if (container.childNodes.length < 1)
childNodes도 읽기 전용 속성입니다. 노드를 추가하려면appendChild() 또는 insertBefore()를 사용할 수 있습니다.
노드를 삭제하려면 RemoveChild()를 사용할 수 있습니다. 작업 후 childNodes 속성이 자동으로 새로 고쳐집니다.
firstChild 속성:
텍스트 노드와 속성 노드는 더 이상 하위 노드를 포함할 수 없으므로
firstChild 속성은 항상 빈 배열을 반환합니다. 하위 노드가 없으면 null이 반환됩니다.
node.firstChild는 node.childNodes[0]과 동일합니다.
firstChild 속성은 읽기 전용 속성입니다.
lastChild 속성:
텍스트 노드와 속성 노드는 더 이상 하위 노드를 포함할 수 없으므로
lastChild 속성은 항상 빈 배열을 반환합니다. 하위 노드가 없으면 null이 반환됩니다.
node.lastChild는 node.childNodes[ node.childNodes.length - 1] 과 동일합니다.
lastChild 속성은 읽기 전용 속성입니다.
nextSibling 속성:
대상 노드의 다음 형제 노드를 반환합니다.
동일한 상위 노드에 속하는 대상 노드 뒤에 노드가 없으면 nextSibling은 null을 반환합니다.
nextSibling 속성은 읽기 전용 속성입니다.
previousSibling 속성:
대상 노드의 이전 형제 노드를 반환합니다.
동일한 상위 노드에 속하는 대상 노드 앞에 노드가 없으면 PreviousSibling은 null을 반환합니다.
이전 Sibling 속성은 읽기 전용 속성입니다.
parentNode 속성:
참고: 요소 노드에만 하위 노드가 있을 수 있으므로 parentNode 속성에서 반환되는 노드는 항상 요소 노드입니다.
물론 예외가 있습니다.
상위 노드가 없는 문서 노드입니다. 따라서 문서 노드의 parentNode 속성은 null을 반환합니다.
parentNode 속성은 읽기 전용 속성입니다.