본문 바로가기

자바스크립트

[자바스크립트] - 속성 값이 있는 노드 추가하는 법

속성 값이 있는 노드 추가하기

 

1. 요소노드 만들기 - createElement( )매서드

: DOM에 새로운 요소를 추가할 때 가장 먼저 해야 할 일은 요소 노드를 만드는 것이다. 

이때 사용하는 매서드는 createElement( )매서드인데 괄호 안에 해당하는 요소 노드를 만들면 된다. 

[기본형]

document.createElement('노드명');

 

2. 속성노드 만들기 - createAttribute( )매서드

: 속성 노드를 추가할 때 createAttribute( )매서드를 사용한다. 

[기본형]

document.createAttribute('속성명' )

 

3. 속성로드에 값 추가하기 - .value프로퍼티

: 생성한 속성 노드에 값을 추가할 때에는 .value프로퍼티를 이용한다. 

[기본형]

요소노드.value = '속성 값';

 

4. 속성노드를 부모 노드에 추가(연결)하기 - setAttributeNode( )매서드

: 속성 노드는 요소 노드의 자식으로 연결해야 한다. 새로 만든 속성 노드를 요소 노드에 

연결하려면 setAttributeNode( )매서드를 사용한다. 

만약 추가할 속성이 요소 노드에 이미 들어있다면 기존 속성노드를 새 속성 노드로 대체한다. 

[기본형]

요소노드.setAttributeNode(속성노드)

속성노드가 변수면 문자열로 " "이 들어가지 않는다.

 

5. 속성노드를 연결한 요소노드를 부모노드에 추가(연결)하기 - appendChild( )매서드

appendChild( )매서드는 텍스트 노드나 속성 노드를 만든 후 요소 노드에 연결할 때 사용한다. 

이때  appendChild( )매서드를 사용해서 연결하는 노드는 자식노드 중 맨 끝에 추가된다. 

[기본형]

부모노드. appendChild(자식노드);

예제)  더보기 버튼 클릭하면 p태그와 함께 img태그 나오기 

html

<div id="container">
      <h2>DOM노드 추가 삭제하기</h2>
      <!-- 링크를 클릭하면 addP()함수가 한번만 실행되도록 한다. 뒤에 ''빈문자를 쓰면 한번만 실행되도록 하게 하는 것  -->
      <a href="#" onclick="addP(); this.onclick='';">더보기</a>
      <div id="info"></div>
    </div>

 

자바스크립트

 <script>
      //속성 값이 있는 노드 추가하기

      function addP() {
        // 1. 새로운 p 요소 노드를 만들기
        let newP = document.createElement("p"); //<p> </p>생성

        //1-1. 새로운 img 요소 노드 만들기
        let newImg = document.createElement("img"); //<img />생성

        // 2. 새로운 p 요소 노드에 들어갈 텍스트 노드 만들기
        let txtNode = document.createTextNode(
          "DOM은 Document Object Model의 약자다"
        );

        // 2-1. 새로운 img 요소 노드에 들어갈 속성 노드 만들기
        let srcNode = document.createAttribute("src");
        let altNode = document.createAttribute("alt");

        // 2-2. 속성 노드에 값 추가하기
        srcNode.value = "./img/pic_8.jpg"; //src 속성값 지정
        altNode.value = "바다"; //alt 속성값 지정

        // 3. 텍스트 노드를 자식노드로 연결하기
        newP.appendChild(txtNode);

        // 3-1. 속성 노드를  자식노드로 연결하기
        newImg.setAttributeNode(srcNode); //변수 이름이니깐 문자열로 들어가지 않는다.
        newImg.setAttributeNode(altNode);

        // 4. 부모태그요소인 #info에 newP를 자식 노드로 연결하기
        document.getElementById("info").appendChild(newP);

        // 4-1.  부모태그요소인 #info에 newImg를 자식 노드로 연결하기
        document.getElementById("info").appendChild(newImg);
      }
    </script>

예제 2 ) 동적인 a태그 나오게 하기

(a태그 부분만 정리한 것) a태그는 속성노드와 텍스트 노드 둘 다 만들어줘야한다. 

 

html

 <div id="container">
      <h2>DOM노드 추가 삭제하기</h2>
      <!-- 링크를 클릭하면 addP()함수가 한번만 실행되도록 한다. 뒤에 ''빈문자를 쓰면 한번만 실행되도록 하게 하는 것  -->
      <a href="#" onclick="addP(); this.onclick='';">더보기</a>
      <div id="info"></div>
    </div>

 

자바스크립트

 function addP() {
 
   // a. 새로운 a 요소 노드 만들기 - <a></a>완성
        let newA = document.createElement("a");
 
   //a-1. 새로운 a요소 노드에 텍스트 노드 만들기 -네이버 글자 완성
        let aTxtNode = document.createTextNode("네이버");
 
   //a-2. 새로운 a 요소 노드에 들어갈 속성 노드 만들기 -href속성 생성
        let aNode = document.createAttribute("href");
  
  //a-3. a속성 노드에 값 추가하기-  href = " https://m.naver.com/"
        aNode.value = "https://m.naver.com/";
 
   //a-4. a텍스트노드를 a한테 자식 노드로 연결하기- <a>네이버</a>생성
        newA.appendChild(aTxtNode);
 
   //a-5 a속성노드를 a한테 자식 노드로 연결하기 -<a href = 주소> 네이버</a>
        newA.setAttributeNode(aNode);
   //a-6. 부모태그요소인 info에 newA 를 자식노드로 연결
        document.getElementById("info").appendChild(newA);
  }

이렇게 나오게 되고 누르면 네이버로 이동하게 된다.