| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 속도개선
- HTML
- DDD
- 불변식
- BOUNDED CONTEXT
- 정처기 준비물
- typeScript
- 애그리게이트
- 빌딩 블록
- Expo
- 코드 푸시
- 정처기 자격
- 타입스크립트
- react natvie
- expo updates
- IAP
- React Native
- rniap
- rn
- 정보처리기사
- 이펙티브 타입스크립트
- Aggregate
- collapsibletabview
- 비동기
- ui thread
- js
- TS
- sharedvalue
- nextJS
- in app purchase
- Today
- Total
nika-blog
JS - DOM 조작 본문
<포스팅 주요 내용>
- DOM의 개념
- document 객체의 생성, 조회, 변경
- document 객체의 제거
+ removeChild 와 remove 비교
+ 여러개의 자식 element 지우기 - document 객체의 추가
+ 이미 존재하는 노드를 추가하면 어떻게 될까? - innerHTML과 textContent의 차이
**참고**
대분류 제목 색상
소분류 제목 색상
DOM이란?
Document Object Model의 약자로, HTML 요소를 Object처럼 조작할 수 있는 Model 입니다.
document 객체 CRUD(Create, Read, Update and Delete)
**DOM 에는 HTML에 적용(APPEND) 하는 메소드가 따로 있음
Create
: createElement
element 생성
- 웹 페이지 상에 보이지 않음. 공중부양 상태. DOM 트리 구조에 아직 연결되지 않음.
const tweetDiv = document.createElement('div');
Read
: querySeletor, querySeletorAll
query : 조회하다(jargon), seletor : 태그, id, class 가 많이 사용됨
Element 조회
**querySelector()
- 선택자 또는 선택자 뭉치와 일치하는 문서 내 첫 번째 Element를 반환한다. 일치하는 요소가 없으면 null을 반환한다.
const oneTweet = document.querySelector('.tweet'); - 더 상세하게 Selector 조회하기
const el = document.querySelector("div.user-panel.main input[name=login]"); //클래스가 "user-panel main"인 <div> 안의, 이름이 "login"인 <input> 중 첫 번째 요소입니다. - ?? querySelector의 부모는 꼭 document 객체여야만 할까요?
**querySeleterAll()
- 선택자를 통해 여러개의 Element 를 가져오기 위해서 사용한다.
- 배열처럼 사용할 수 있는 유사 배열, Array-like Object
- 유사배열 배열로 바꾸기
[...document.querySelectorAll('.item')] //spread 연산자 사용
자식 엘리먼트를 찾고 싶다면?
ex ) document.body.children
부모 엘리먼트를 찾고 싶다면?
ex ) document.body.parentElement
오래된 방식들..
**getElementByID()
- elemment 의 id 로 접근할 수 있다.
**getElementByClassName()/getElementsByClassName()
- element 의 class 이름으로 접근할 수 있다.
Update
:textContent, id, classListm setAttiribute
Element 변경
**setAttribute(name, value)
- 지정된 요소의 속성 값을 설정한다. 속성이 이미 존재하면 값이 업데이트 되고, 그렇지 않으면 지정된 이름과 값으로 새 속성이 추가된다.
let aElement = document.createElement('a'); aElement.setAttirbute('id', 'javascript');
**classList.add()/classList.remove()
- Element에 class name을 추가/삭제할 수 있다.
**textContent
- Element 및 Node에 텍스트를 추가할 수 있는 메서드이다. 반환값은 문자열 또는 null이다.
Delete
: remove, removeChild, innerHTML, textContent
Element 제거
**removeChild() , remove()
- remove()는 노드를 메모리에서 삭제하고 종료한다.
- 반면에 removeChild()는 메모리에 해당 노드는 그대로 존재하며, 부모 노드와의 부모-자식관계를 끊어 DOM 트리에서 제거한다. 최종적으로는 관계를 끊은 해당 노드의 참조를 반환한다.
| 차이점 | remove() | removeChild() |
| 인터넷 익스플로러 | 미지원 | 지원 |
| 부모 엘리먼트 | 불필요 | 필요 |
| 반환값 | x | 삭제한 노드 참조 반환 |
| 노드 리스트 삭제 | x | 0 |
| 하위 노드 삭제 | 0 | 0 |
**innerHTML
- 여러 개의 자식 엘리먼트 지우기
-> 보안 문제 발생document.querySelector('#container').innerHTML = '';
-> 반복문 이용const container = document.querySelector('#container'); while (container.firstChild) { container.removeChild(container.firstChild); } - innerHTML 사용은 꼭 필요하지 않으면 쓰지 않는 것이 좋다. innerHTML는 이름 그대로 HTML을 반환한다. HTML tag를 직접 삽입하여 실행하는 형태의 메소드는 늘 이런 위험을 가지고 있다.
Append
: appendChild
Element 추가
- 웹 페이지 상에 보임
document.body.append(tweeDiv);
**appent()
- ParentNode.append() 메서드는 ParentNode의 마지막 자식 뒤에 Node 객체 또는 DOMString 객체를 삽입.
- 여러개 삽입 가능.
- 문자 추가하기
parent.append("some text"); - 함께 추가하기
let p = document.createElement("p"); parent.append("some text", p); console.dir(parent.childNodes); //NodeList [ # text "some text", <p>];
**appendChild()
- Node.appendChild() 메서드는 한 노드를 특정 부모 노드의 자식 노드 리스트 중 마지막 자식으로 붙인다. 하나의 노드만 붙일 수 있다. (text 불가)
- 만약, 주어진 노드가 이미 존재하는 노드라면 새로운 위치로 이동시킨다.
한 노드가 문서상의 두 지점에 동시에 존재할 수 없음. - 추가한 Node 객체를 반환한다.
**prepend()
- ParentNode 의 첫번째 자식으로 Node 객체 또는 DOMStinrg 객체를 삽입한다.
**after()
- 선택한 Element 뒤에 새 Element 를 추가한다.
**before()
- 선택한 Element 앞에 새 Element를 추가한다.
innerHTML과 textContent의 차이
- innerHTML은 'Element'의 속성으로, 해당 Element의 HTML, XML을 읽어오거나, 설정할 수 있습니다.div안에 있는 HTML 전체 내용을 가져오는 것을 확인 할 수 있습
- textContent는 'Node'의 속성으로, innetText와는 달리 <script>나 <style> 태그와 상관없이 해상 노드가 가지고 있는 텍스트 값을 그대로 읽습니다.
'FE > JS' 카테고리의 다른 글
| JS - DOM 심화 : createDocumentFragment, template tag, element 와 node 의 차이점, children과 childrenNodes의 차이점offsetTop, ,offsetWidth ,HTML과 DOM 차이 (0) | 2022.02.27 |
|---|---|
| Canvas (0) | 2022.02.24 |
| 프로미스(Promise) (0) | 2021.09.01 |
| JS의 동기와 비동기 (0) | 2021.08.30 |
| JSON(Javascript Object Notation) (0) | 2021.08.29 |