JavaScript

JS | 부모 노드, 자식 노드 선택

개발 공부 2023. 1. 2. 11:09

<ul>

      <li> <a></a> </li>

      <li> <a></a> </li>

</ul>

- a 의 부모는?  li

- 첫번째 li와 마지막 li는 형제 관계


노드 간 부모, 자식을 선택하는 키워드

기능 설명
childNodes 모든 자식 노드 선택
단 , 노드에 생략된 text 도 포함된다
children 모든 자식 노드 선택
parentElement 부모노드 선택
nextElementSibling 다음 형제 노드 선택
previousElementSibling 이전 형제 노드 선택
firstChild 첫번째 자식 노드 선택
lastChild 마지막 자식 노드 선택

 

console.dir(매개값);

해당 키워드로 어떤 속성을 얻을 수 있는지 알려줌!

 

보통 element가 붙은 키워드를 사용

 

html ↓↓↓

더보기
    <table >
        <thead>
            <tr>
                <th>이동</th>
                <th>번호</th>
                <th>이름</th>
                <th>내용</th>
                <th>날짜</th>
            </tr>

        </thead>

        <tbody class="table">
        <tr>
            <td><button onclick="down(this)">↓</button><button onclick="">↑</button></td>
            <td>1</td>
            <td>홍길자</td>
            <td>안녕!</td>
            <td>2019-01-01</td>
        </tr>
        <tr>
            <td><button onclick="down(this)">↓</button><button onclick="">↑</button></td>
            <td>2</td>
            <td>이순신</td>
            <td>반가워</td>
            <td>2019-02-01</td>
        </tr>
        <tr>
            <td><button onclick="down(this)">↓</button><button onclick="">↑</button></td>
            <td>3</td>
            <td>이순신</td>
            <td>반가워</td>
            <td>2019-02-01</td>
        </tr>
        <tr>
            <td><button onclick="down(this)">↓</button><button onclick="">↑</button></td>
            <td>4</td>
            <td>이순신</td>
            <td>반가워</td>
            <td>2019-02-01</td>
        </tr>
        <tr>
            <td><button onclick="down(this)">↓</button><button onclick="">↑</button></td>
            <td>5</td>
            <td>이순신</td>
            <td>반가워</td>
            <td>2019-02-01</td>
        </tr>
        </tbody>
    </table>

 

//* 동일한 이벤트 걸어주는 방법!
//방법1 >> 인라인 이벤트로 동일한 이벤트 걸어주기
//방법2 >> 버튼을 배열로 얻어와서 반복을 돌려 이벤트를 걸어주기
function down(x){
            console.log(x); //x는 자기자신 태그 <button onclick="down(this)">↓</button>
            
            //* 부모님을 가리키는 키워드 (부모님 포함한 자기자신까지)
            console.log(x.parentNode); //부모태그 (공백이 있다면, 공백을 선택)
            console.log(x.parentElement); //부모태그 (순수한 태그의 형태만 선택)
            //↑ parentElement 위 키워드를 자주 사용

            //* 해당 키워드로 어떤 속성을 얻을 수 있는지 알려줌
            console.dir(x);

            //* 다음 형제
            console.log(x.parentElement.nextElementSibling); //<td>1</td>
            console.log(x.parentElement.nextElementSibling.nextElementSibling);//<td>홍길자</td>

            //* 이전 형제
            console.log(x.parentElement.previousElementSibling); //null

            console.log(x.parentElement.parentElement.firstElementChild); //tr기준 첫번째 자식태그
            console.log(x.parentElement.parentElement.lastElementChild); //tr기준 마지막번째 자식태그

            console.log(x.parentElement.parentElement.children[2]); //자식들 중 3번째

}

 

insertBefore(삽입노드, 기준노드) : 기준노드 앞에 삽입노드 추가

예제 ) insertBefore을 이용하여 태그를 이동해보기

function down(x){
            var current = x.parentElement.parentElement; //버튼의 부모행 (tr) //현재위치
            var next = current.nextElementSibling; //tr의 다음행 //현재위치의 다음위치

            console.log(current);
            console.log(next);

            if(next == null){
                alert("마지막 행입니다.");
                return; //함수 종료
            }

            //insertBefore는 동작시킬 태그의 부모태그를 얻습니다.
            var table = document.querySelector(".table");
            table.insertBefore(next,current); //current(현재위치)앞에 next(현재위치의 다음꺼)를 넣는다. 

        }
        
        
  function up(x){
            var current = x.parentElement.parentElement;
            var prev = current.previousElementSibling;

            if(prev == null){
                alert("첫번째 행입니다.");
                return;
            }

            var table= document.querySelector(".table");
            table.insertBefore(current,prev);
        }