javascript+es6

[ javascript ] 11. DOM 선택, 출력, 속성,탐색

변쌤(이젠강남) 2023. 9. 24. 00:14
반응형

1. document.querySelector("선택자")

2. document.querySelectorAll("선택 자명")

3. innerHTML , innerText, textContent

4. 속성

5. DOM 탐색

6. transitionend

 

  mdn
querySelector("선택자") 해당 선택자를 만족하는 요소하나반환 바로가기
querySelectorAll("선택자명") 해당 선택자를 만족하는 모든요소반환 바로가기
선택자   바로가기
innerHTML   바로가기
innerText   바로가기
textContent   바로가기

 

# document.querySelector("선택자")

let element = parentNode.querySelector(selector);

 

# document.querySelectorAll("선택 자명")

let elementList = parentNode.querySelectorAll(selector);

let nodeList = document.querySelectorAll(selector);
let elements = Array.from(nodeList);

NodeList객체는 배열 객체가 아니라 배열과 유사한 객체입니다. 그러나 최신 웹 브라우저에서는 forEach() 메서드나 for... of루프를 사용할 수 있습니다.

NodeList배열로 변환하려면 Array.from() 다음과 같은 방법을 사용합니다.

 

let firstHeading = document.querySelector('h1');
let heading2 = document.querySelectorAll('h2');
let note = document.querySelector('.menu-item'); //클래스의 첫 번째 요소  
let notes = document.querySelectorAll('.menu-item'); //menu-item가 포함된 모든요소
let logo = document.querySelector('#logo');
//id문서에서 고유해야 하므로 querySelectorAll()관련이 없습니다.

 

속성 선택자

[attribute]

[attribute=value] 
[속성명 = 속성값] : [속성명] 및 [속성값]이 동시에 일치하는 요소를 선택자로 지정하는 기능

[attribute~=value]
[속성명 ~= 속성값] : 특정 문자 포함
[속성명]이 일치할 때 특정 문자가 [속성값]에 들어간 경우 선택자로 지정하는 기능입니다.

[attribute|=value]
[속성명 |= 속성값] : 접두사 포함
[속성명]이 일치하고, [속성값]이 특정 접두사로 시작하는 요소를 선택자로 지정합니다.

[attribute^=value]
[속성명 ^= 속성값] : 접두사 포함
[속성명]이 일치하고, [속성값]이 특정 접두사로 시작되는 요소를 선택자로 지정합니다.

[attribute$=value]
[속성명 $= 속성값] : 접미사 포함
특정 접미사로 끝나는 속성값을 선택자로 지정하고 싶은 경우 $= 기호를 사용합니다.
mdn 참고 바로가기

 

선택자

let autoplay = document.querySelector('[autoplay]');
let autoplays = document.querySelectorAll('[autoplay]');
let elements = document.querySelectorAll('div, p'); 
let links = document.querySelector('p a');
let listItems = document.querySelectorAll('ul > li');
let listItems = document.querySelectorAll('ul.nav > li');
let links = document.querySelectorAll('p ~ a');
let links = document.querySelectorAll('h1 + a');
let links = document.querySelector('h1 + a');
let listItem = document.querySelectorAll('li:nth-child(2)');
let links = document.querySelector('p::first-line');

 

#  innerHTML , innerText, textContent

 

 innerHTML :

element내에 포함된 HTML 또는 XML 마크업을 가져오거나 태그와 함께 입력하여 내용을 직접 설정할 수 있고
 HTML 코드를 JavaScript 코드에서 새 내용으로 쉽게 변경할 수 있습니다.

 

innerText : 

element 내에서 사용자에게 보이는 text값들을 가져오거나 설정할 수 있습니다.

 

textContent :

 'Node'의 속성으로, 사용자에게 보이는 text값만 읽어오는 innetText와는 달리 <script>나 <style> 태그에 상관없이 해당 노드가 가지고 있는 텍스트 값을 모두 읽어옵니다.

 

  설명 mdn
parentNode DOM 트리에서 지정된 노드의 상위를 반환 바로가기
parentElement 부모요소 바로가기
firstChild 노드의 첫 번째 자식을 반환 바로가기
firstElementChild 첫번째 요소 바로가기
lastElementChild 마지막 요소 바로가기
nextSibling 다음에 있는 노드를 반환 바로가기
nextElementSibling 다음 요소 바로가기
previousElementSibling 이전 요소 바로가기
children 하위요 바로가기
프로퍼티 이름 설명
parentNode 이 노드의 부모 노드를 참조 , document객체의 부모 노드는 null
childNoses 이 노드의 자식 노드의 참조를 저장할 유사배열객체 (NodeList )
firstChild 이 노드의 첫번째 자식 노드. 자식 노드가 없을때는 null
lastChild 이 노드의 마지막 자식 노드 자식노드가 없을때는 null 
nextSibling 이 노드와 같은 부모 노드를 가진 이 노드 다음의 형제 노드
previousSlibling 이 노드와 같은 부모 노드를 가진 이 노드 이전 형제 노드
nodeType 노드 유형을 뜻하는 숫자(1: 요소 노드 , 3:텍스트노드, 9:Document)
nodeValue 텍스트 노드의 텍스트 콘텐츠 요소 노드에서는 null
nodeName 요소 노드는 대문자로 바뀐 요소 이름이 들어가고 텍스트 노드는 #text 
document.childNodes[0].childNodes[2]
document.firstChild.lastChild

 

# 속성

속성 설명 mdn
hasAttribute 속성의 존재 확인 바로가기
getAttribute 속성의 값 가져오기 바로가기
setAttribute 속성값 변경 바로가기
removeAttribute 속성값 제거 바로가기
- elem.hasAttribute(name) — 속성의 존재 확인.
- elem.getAttribute(name) — 속성값을 가져옴.
- elem.setAttribute(name, value) — 속성값을 변경함.
- elem.removeAttribute(name) — 속성값을 제거함.

 

HTML 속성 (HTML Attributes)

HTML 속성은 HTML 문서에서 요소를 정의할 때 사용하는 속성입니다. 이 속성들은 HTML 태그 안에 작성되며, 요소의 초기 상태를 설정합니다.

 

<a id="link" href="/page.html" title="example">사이트명</a>

 

href, id, title은 HTML 속성

 

 

  • 문서에 직접 작성됨: HTML 문서 내에서 직접 설정됩니다.
  • 초기 값 설정: 요소의 초기 상태를 정의합니다.
  • 문자열로 저장: HTML 속성 값은 항상 문자열로 저장됩니다.

 

 

DOM 속성 (DOM Properties)

DOM 속성은 JavaScript를 통해 접근하고 조작할 수 있는 객체 속성입니다. DOM 속성은 HTML 요소를 JavaScript 객체로 표현하며, 이 객체의 속성으로 접근됩니다.

 

href는 link 요소의 DOM 속성으로 접근되고 수정

<a id="link" href="/page.html" title="example">사이트명</a>

<script>
    let link = document.getElementById('link');
    console.log(link.href); // DOM 속성에 접근
    link.href = "/newpage.html"; // DOM 속성 수정
</script>

 

 

  • JavaScript 객체 속성: HTML 요소를 JavaScript 객체로 표현한 것입니다.
  • 동적으로 변경 가능: JavaScript를 통해 읽기 및 쓰기가 가능합니다.
  • 다양한 데이터 타입: DOM 속성은 문자열뿐만 아니라 객체, 배열 등 다양한 데이터 타입을 가질 수 있습니다.

 

 

차이점 

  1. 초기 값과 동적 값:
    • HTML 속성은 요소의 초기 상태를 설정합니다.
    • DOM 속성은 JavaScript를 통해 동적으로 변경될 수 있습니다.
  2. 데이터 타입:
    • HTML 속성은 항상 문자열입니다.
    • DOM 속성은 다양한 데이터 타입을 가질 수 있습니다 (문자열, 숫자, 객체 등).
  3. 접근 방법:
    • HTML 속성은 getAttribute() 및 setAttribute() 메서드를 사용하여 접근합니다.
    • DOM 속성은 점 표기법을 사용하여 직접 접근합니다.

 

 

 

# 요소의 트리

프로퍼티 이름 설명
children 이 요소의 자식 요소 참조를 저장한 유사배열객체(NodeList)
parentElement 이 요소의 부모 요소 객체를 참조
firstElementChild 이 요소의 첫번째 자식 요소 객체를 참조
lastElementChild 이 요소의 마지막 자식 요소 객체를 참조
nextElementSibling 이 요소와 같은 부모를 가진 이 요소 다음의 형제 요소 객체를 참조
previousElementSibling 이 요소와 같은 부모를 가진 이 요소 이전의 형제 요소 객체를 잠조
chnildElementCount 자식 요소의 개수 children.length와 같음
Element.closest() 특정 요소에서부터 시작하여 해당 요소의 자신을 포함한 조상 요소 중에서 가장 가까운 지정된 셀렉터에 해당하는 요소를 찾습니다.          mdn

 

 

노드의 종류 생성자 nodeName nodeValue nodeType
문서노드 HTMLDocuemnt #document null 9
요소노드 HTMLElement 요소이름(대문자) null 1
텍스트노드 Text #text 텍스트 3
주석노드 Comment #comment 주석 내용 8
속성노드 Attr 속성이름 속성 값 2

 

상위요소

 <div id="main">
        <p class="note">테스트입니다.</p>
    </div>

    <script>
        let note = document.querySelector('.note'); 
        //.note먼저 메소드를 사용하여 클래스 가 있는 요소를 선택합니다
        console.log(note.parentNode);
        //요소의 부모 노드를 찾습니다.
    </script>
    
    결과)
     <div id="main">
        <p class="note">테스트입니다.</p>
    </div>

 

다음 형제요소

let nextSibling = currentNode.nextElementSibling;
<ul id="menu">
    <li>Home</li>
    <li>Products</li>
    <li class="current">Customer Support</li>
    <li>Careers</li>
    <li>Investors</li>
    <li>News</li>
    <li>About Us</li>
</ul>

js)
let current = document.querySelector('.current');
let nextSibling = current.nextElementSibling;

console.log(nextSibling);

 

이전 형제요소 

let prevSibling = currentNode.previousElementSibling;
let current = document.querySelector('.current');
let prevSiblings = current.previousElementSibling;

console.log(prevSiblings);

 

첫 번째 하위요소 가져오기

 

지정된 요소의 첫 번째 하위 요소를 가져오려면 firstChild해당 요소의 속성을 사용합니다.

firstChild속성은 요소 노드, 텍스트 노드 또는 주석 노드와 같은 모든 노드 유형이 될 수 있는 하위 노드를 반환합니다. 

let firstChild = parentElement.firstChild;
 <ul id="menu">
    <li class="first">Home</li>
    <li>Products</li>
    <li class="current">Customer Support</li>
    <li>Careers</li>
    <li>Investors</li>
    <li>News</li>
    <li class="last">About Us</li>
  </ul>
  
  js)
  let content = document.getElementById('menu');
let firstChild = content.firstChild.nodeName;
console.log(firstChild);

결과: #text

 

첫 번째 요소 

let firstElementChild = parentElement.firstElementChild;
let content = document.getElementById('menu');
console.log(content.firstElementChild);

결과
<li class="first">Home</li>

 

마지막 노드와 마지막요소

let lastChild = parentElement.lastChild; 
let lastChild = parentElement.lastElementChild;
let menu = document.getElementById('menu');
console.log(main.lastElementChild);

결과)
<li class="last">About Us</li>

자식노드
let children = parentElement.childNodes;

하위요소
let children = parentElement.children;

let menu = document.getElementById('menu');
let children = menu.children;
console.log(children);

firstChild.lastChild : 텍스트 노드, 주석 노드 및 요소 노드를 포함한 모든 노드 유형일 수 있는 노드의 첫 번째 및 마지막 하위를 반환합니다 
 firstElementChild.lastElementChild : 첫 번째 및 마지막 하위 요소 노드를 반환합니다
지정된 노드의 모든 노드 유형에 대한 모든 하위 노드의 childNodes라이브를 반환합니다. 

NodeList하위 항목은 Element지정된 노드의 모든 하위 노드를 반환합니다.

 

Document  객체의 프로퍼티

 

 

# closest()

특정 요소에서부터 시작하여 해당 요소의 자신을 포함한 조상 요소 중에서 가장 가까운 지정된 셀렉터에 해당하는 요소를 찾습니다.

<div class="container">
        <div class="parent">
            <button class="box">클릭</button>
        </div>
    </div>
    
    <script>
       const box = document.querySelector('.box')
       box.addEventListener('click', (e) => {
            const tg = e.target;
            const closestContainer = tg.closest('.container');

            if (closestContainer) {
                alert('Container 찾음');
            } else {
                alert('Container 없음');
            }
        });
    </script>

 

 

# transitionend

 

Element: transitionend event mdn

 

 

transitionend 이벤트는 CSS 트랜지션(transition)이 완전히 종료되었을 때 발생하는 이벤트입니다.

transitionend 이벤트는  애니메이션이 끝날 때마다 발생하며, 이를 통해 JavaScript에서 애니메이션의 종료를 감지하고 특정 동작을 수행할 수 있습니다. 이벤트 핸들러를 등록하여 애니메이션이 종료되는 시점을 감지하고 그에 따라 필요한 작업을 수행할 수 있습니다.

 

const transition = document.querySelector(".transition");

transition.addEventListener("transitionend", () => {
  console.log("Transition ended");
});

 

 

 

 

 

반응형