일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DDD
- react natvie
- rn
- in app purchase
- react native bridge
- TS
- BOUNDED CONTEXT
- IAP
- react native 내부 구조
- 빌딩 블록
- 이벤트 시스템
- 정보처리기사
- nextjs route code
- nextjs 라우팅
- HTML
- typeScript
- std::char_traits<unsigned char>
- 이펙티브 타입스크립트
- 정처기 준비물
- rniap
- nextjs사용이유
- 불변식
- 애그리게이트
- nextJS
- 정처기 자격
- 속도개선
- 비동기
- js
- Aggregate
- 타입스크립트
- Today
- Total
nika-blog
JS - DOM 심화 : createDocumentFragment, template tag, element 와 node 의 차이점, children과 childrenNodes의 차이점offsetTop, ,offsetWidth ,HTML과 DOM 차이 본문
JS - DOM 심화 : createDocumentFragment, template tag, element 와 node 의 차이점, children과 childrenNodes의 차이점offsetTop, ,offsetWidth ,HTML과 DOM 차이
nika0 2022. 2. 27. 12:05<포스팅 주요 내용>
- createDocumentFragment
- template tag
- element 와 node 의 차이점
- children과 childrenNodes의 차이점
- offsetTop
- offsetWidth
- HTML과 DOM 차이
효율적 DOM 제어 : createDocumentFragment
개념 : DocumentFragment는 기본적으로 DOM과 동일하게 동작하지만, HTML의 DOM 트리에는 영향을 주지 않으며, 메모리에서만 정의됩니다.
왜 필요한가?
예를 들어, 여러개의 li 태그를 가지고 있는 ul 태그를 조건에 따라 추가해야 한다면 기존에는 div 태그등을 만들어서 그 안에 ul 및 li 태그들을 생성, 추가 한두에 조건에 따라 추가해 주었습니다.
이 경우 브라우저에는 보이지 않지만 DOM 트리에 연결되지 않을 뿐 생성된 상태입니다. 또한 해당 div 태그를 DOM 트리에 연결(추가)하고 난 후에도 div Element 내용은 변경되지 않고 동일합니다. 하지만 만약에 해당 내용이 추가한 후에 더이상 필요가 없는 경우나, ul 태그를 div 로 감싸고 싶지 않은 경우에 DocumentFragment는 유용하게 사용할 수 있습니다.
(elem.appendChild(documentFragment) 시 documentFragment는 추가하지 않음)
template tag 사용법
HTML <template> 요소는 페이지를 불러온 순간 즉시 그려지지는 않지만, 이후 JavaScript를 사용해 인스턴스를 생성할 수 있는 HTML 코드를 담을 방법을 제공합니다.
예제
<table id="producttable">
<thead>
<tr>
<td>UPC_Code</td>
<td>Product_Name</td>
</tr>
</thead>
<tbody>
<!-- 존재하는 데이터는 선택적으로 여기에 포함됩니다 -->
</tbody>
</table>
<!-- template -->
<template id="productrow">
<tr>
<td class="record"></td>
<td></td>
</tr>
</template>
// 템플릿 엘리먼트의 컨텐츠 존재 유무를 통해
// 브라우저가 HTML 템플릿 엘리먼트를 지원하는지 확인합니다
if ('content' in document.createElement('template')) {
// 기존 HTML tbody 와 템플릿 열로 테이블을 인스턴스화합니다
var t = document.querySelector('#productrow');
// 새로운 열을 복제하고 테이블에 삽입합니다
var tb = document.querySelector("tbody");
var clone = document.importNode(t.content, true);
td = clone.querySelectorAll("td");
td[0].textContent = "1235646565";
td[1].textContent = "Stuff";
tb.appendChild(clone);
} else {
// HTML 템플릿 엘리먼트를 지원하지 않으므로
// 테이블에 열을 추가하는 다른 방법을 찾습니다.
}
element 와 node의 차이
- Node는 태그 노드와 텍스트 노드 전체를 가리키고, Element는 텍스트 노드를 제외하고, 흔히 생각하는 태그(<a>같은)만 가리킵니다.
children 과 childrenNodes의 차이
- children : 현재 요소의 자식 요소가 포함된 HTMLCollection
- childrenNodes : 현재 요소의 자식 노드가 포함된 NodeList를 반환합니다. 이때 반환되는 NodeList에는 요소 노드뿐만 아니라 주석 노드와 같은 비 요소 노드를 포함합니다.
좌표 정보 조회 : offsetTop
-> HTMLElement.offsetTop읽기 전용 속성은 노드 상단의 내부 경계를 기준으로 현재 요소의 외부 경계의 거리를 반환 합니다
크기 정보 조회 : offsetWidth
-> 일반적으로 엘리먼트의 전체 크기를 알고 싶다면, `offsetWidth`와 `offsetHeight` 속성을 가져오면 된다. 이 속성은 엘리먼트의 패딩과 보더, 스크롤바의 사이즈를 포함한 값을 리턴한다.
<DOM 구조 파악하기, HTML 과 DOM 의 닮음>
DOM은 원본 HTML 문서를 파싱한 객체 기반 표현 방식입니다. 둘은 서로 비슷하지만, DOM이 갖고 있는 근본적인 차이는 단순 텍스트로 구성된 HTML 문서의 내용과 구조가 객체 모델로 변환되어 다양한 프로그램에서 사용될 수 있다는 점입니다.
DOM의 개체 구조는 “노드 트리”로 표현됩니다. 하나의 부모 줄기가 여러 개의 자식 나뭇가지를 갖고 있고, 또 각각의 나뭇가지는 잎들을 가질 수 있는 나무와 같은 구조로 이루어져 있기 때문입니다.
참고
console.dir(elem) : elem 이 자바스크립트 객체라면 console.log(elem)과 같은 결과를 출력. elem이 DOM 요소일 때는 DOM을 객체처럼 취급하여 출력.
** elem이 DOM 요소일 때 console.log(elem)은 DOM트리를 출력
'FE > JS' 카테고리의 다른 글
javascript 옵셔널 체이닝 (Optional Chaining) (0) | 2025.02.10 |
---|---|
Canvas (0) | 2022.02.24 |
JS - DOM 조작 (0) | 2022.02.20 |
프로미스(Promise) (0) | 2021.09.01 |
JS의 동기와 비동기 (0) | 2021.08.30 |