Notice
Recent Posts
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 크리에이터링크 상세페이지
- html 다운로드 버튼 만들기
- 크리에이터링크 이미지클릭
- 티스토리챌린지
- javascript 자식 노드 복사
- 애드센스
- 다른 사이트로 연결
- 쏜살치킨
- 당연해?왜?
- javascript 자식 노드 추가
- 크리에이터링크 이미지링크
- 매일두유
- 오블완
- 대한제국역사관
- 당연해?뭐가?
- css사칙연산
- 포토샵 스페이스바 오류
- 자바스크립트 타이머 만들기
- 포토샵 핸드툴 오류
- 클린 서구
- 셀렉트 태그 링크
- css변수
- 자바스크립트 링크
- 후두골이형성증
- 종묘대제
- javascript 자식 노드 삭제
- 강아지 발작
- 덕수궁 석조전
- 일러스트 핸드툴 오류
- css 화면이동
Archives
- Today
- Total
열정과 게으름 사이
javascript 자식 노드 추가,삭제,복사 본문
1. 노드 추가
노드의 생성 메소드: createElement()
노드를 생성하고 기존의 노드에 추가 하는 메소드: addendChild(), append(), insertBefore()
- addendChild(), append() => 는 기준 노드의 마지막 자식 요소로 추가.
- insertBefore() => 는 기준 노드의 앞쪽으로 추가한다.
html
<div class="out-box">:out box</div>
- appendChild() 는 노드객체만을 받을 수 있고, 하나의 노드만을 추가할 수 있다.
- return값을 반환한다.
const $out_box=document.querySelector('.out-box');
const inner_box= document.createElement('div');//추가할 노드 생성
inner_box.setAttribute('class','inner-box');//노드에 클래스를 추가할 경우
inner_box.innerHTML+='<span class="text">inner-box</span>';//노드 내부에 추가 생성 할 경우
$out_box.appendChild(inner_box);//부모 노드의 제일 뒤로 추가
//결과
//<div class="out-box">
":out box"
<div class="inner-box">
<span class="text">inner-box</span>
</div>
</div>
-----
//리턴값 반환
//let newEl = $out_box.appendChild(inner_box);
//console.log(newEl);
//=>결과-리턴값
// <div class="inner-box">
// <span class="text">inner-box</span>
// </div>
- append() 는 노드객체와 string(text)를 사용할 수 있고, 여러개의 요소를 추가할 수 있다.
- return값을 반환하지 않는다.
const $out_box=document.querySelector('.out-box');
const inner_box= document.createElement('div');
const inner_box2= document.createElement('div');
inner_box.setAttribute('class','inner-box');
inner_box2.setAttribute('class','inner-box2');
inner_box.innerHTML+='<span class="text">inner-box</span>';
$out_box.append(inner_box,'안쪽 박스',inner_box2);
//결과
//<div class="out-box">
":out box"
<div class="inner-box">
<span class="text">inner-box</span>
</div>
"안쪽 박스"
<div class="inner-box2"></div>
</div>
//리턴값 반환
//let newEl = $out_box.append(inner_box);
//console.log(newEl);
//=>결과-리턴값
//undefined
- insertBefore()
insertBefore(추가노드,기준노드)형식으로 사용한다. 기준노드가 생략되면 appendChild()처럼 제일 마지막에 추가 된다.
const $out_box=document.querySelector('.out-box');
const inner_box= document.createElement('div');
const inner_box2= document.createElement('div');
inner_box.setAttribute('class','inner-box');
inner_box2.setAttribute('class','inner-box2');
inner_box.innerHTML+='<span class="text">inner-box</span>';
$out_box.appendChild(inner_box);
$out_box.insertBefore(inner_box2, $out_box.firstChild);//$out_box의 첫번째 요소의 앞에 추가
//결과
//<div class="out-box">
<div class="inner-box2"></div>
":out box"
<div class="inner-box">
<span class="text">inner-box</span>
</div>
</div>
2. 노드 삭제
메소드 remove(), removechild()
- remove() : 해당 노드를 메모리에서 삭제하고 종료.리턴값 없음
- removechild() :
부모-자식 관계를 DOM트리에서 해제, 메모리에 노드 존재, 해제한 노드 참조 리턴.부모 노드에서만 삭제 가능 => 부모요소.removechild();
- remove()
const $out_box=document.querySelector('.out-box');
const $inner_box=document.querySelector('.inner-box');
let newEl=$inner_box.remove();
console.log($out_box);
console.log(newEl);
// 결과값
// <div class="out-box">:out box</div>
// undefined
----
//부모노드에서 remove()로 자식 노드 삭제할 경우
$out_box.remove($inner_box);
console.log($out_box);
// 결과값
// <div class="out-box">
// :out box
// <div class="inner-box">
// :inner-box:
// </div>
// </div> => 삭제 안됨
- removechild()
const $out_box=document.querySelector('.out-box');
const $inner_box=document.querySelector('.inner-box');
let newEl= $out_box.removeChild($inner_box);
console.log($out_box);
console.log(newEl);
$inner_box.removechild(); //부요 요소가 아닌 삭제요소에서 스스로 삭제
// 결과값
// <div class="out-box">:out box</div>
// <div class="inner-box"> :inner-box: </div> ==>리턴값
//index.html:27 Uncaught TypeError: Failed to execute 'removeChild' on 'Node': 1 argument required, but only 0 present. =>오류
- 전체 자식 노드 삭제
<div class="out-box">
:out box
<div class="inner-box">
:inner-box:
<div class="inner-box2">
:inner-box2:
</div>
</div>
<div class="inner-box3">
:inner-box3:
</div>
</div>
const $out_box=document.querySelector('.out-box');
while($out_box.hasChildNodes()){ //자식 요소가 있는지 확인-false가 될때까지 반복
$out_box.removeChild($out_box.firstChild); // 첫번째 자식 요소를 삭제
}
console.log($out_box);
// 결과값
//<div class="out-box></div>
3. 노드 복사
메소드 cloneNode()
- cloneNode(true) : true를 넣어주면 자식 노드까지 복사됨
- cloneNode(true)
//html은 노드 삭제 예시와 같음
const $out_box=document.querySelector('.out-box');
let firstClone= $out_box.firstElementChild.cloneNode(true);
let firstClone2= $out_box.firstElementChild.cloneNode(); //true 없음
let lastClone= $out_box.lastElementChild.cloneNode(true);
console.log(firstClone);
console.log(firstClone2);
console.log(lastClone);
//결과
//firstClone출력 => <div class="inner-box">
// ":inner-box:"
// <div class="inner-box2"> :inner-box2:</div>
// </div>
//firstClone2출력 => <div class="inner-box"></div>
//lastClone출력 => <div class="inner-box3"> :inner-box3: </div>
반응형
'공부 메모 > javaScript' 카테고리의 다른 글
갤러리 < 더보기 >만들기 (0) | 2021.11.22 |
---|---|
자바스크립트 링크 /새 창 크기 (0) | 2021.11.06 |
html에 인클루드 하기 (0) | 2021.10.25 |
시간 줄어드는 타이머 만들기 (0) | 2021.10.21 |
다른페이지로 연결하기 (0) | 2021.10.13 |
Comments