
“브라우저에서의 JavaScript”
DOM API를 통해 HTML과 CSS를 동적으로 수정, 사용자 인터페이스를 업데이트하는 일에 가장 많이 쓰임Node
windowdocumentwindow object
window 메서드 예시window.open()window.alert()window.print()document object
document의 속성 예시<title> 값)

document는 window의 속성이다.
<head>, <body>는 HTML요소로 element<title>, <p>는 Text Node이면서 elementid=“unique”는 DOM에서는 Attr Node이고, HTML요소인 <p>의 속성이므로 element는 아님이제 Document 가 제공하는 기능을 사용해 웹 페이지 문서를 조작해보자.
DOM 조작 순서 : 선택(Select) → 조작(Manipulation)
document.querySelector(selector)document.querySelectorAll(selector)<h1 id="title">DOM 조작</h1>
<p class="text">querySelector</p>
<p class="text">querySelectorAll</p>
<ul>
<li>Javascript</li>
<li>Python</li>
</ul>
console.log(document.querySelector('#title'))
// <h1 id="title">DOM 조작</h1>
console.log(document.querySelectorAll('.text'))
// NodeList(2) [p.text, p.text]
console.log(document.querySelector('.text'))
// <p class="text">querySelector</p>
console.log(document.querySelectorAll('body > ul > li'))
// NodeList(2) [li, li]
liTags = document.querySelectorAll('body > ul > li')
liTags.forEach(element => {
console.log(element)
})
/*
<li>
::marker
"Javascript"
</li>
<li>
::marker
"Python"
</li>
*/
NodeListdocument.createElement(tagName)HTMLElement.innerTextnode.textcontent vs HTMLElement.innerTextinnerText는 사용자에게 보이는 대로 출력, textcontent는 실제 데이터 출력
<p>node.textcontent vs HTMLElement.innerText</p>
const ptag = document.querySelector('p')
console.log(ptag.innerText) // node.textcontent vs HTMLElement.innerText
console.log(ptag.textContent) // node.textcontent vs HTMLElement.innerText
ptag.style.visibility = 'hidden'
console.log(ptag.innerText) // 아무 것도 출력되지 않음
console.log(ptag.textContent) // node.textcontent vs HTMLElement.innerText
Node.appendChild()<h1>과일 목록</h1>
<ul id="fruits">
<li id="apple">apple</li>
</ul>
<h1>야채 목록</h1>
<ul id="fruits">
<li id="banana">Banana</li>
<li id="cucumber">Cucumber</li>
</ul>
const fruitsList = document.querySelector('#fruits')
const banana = document.querySelector('#banana')
fruitsList.appendChild(banana)


Node.removeChild()// 태그 생성
const h1Tag = document.createElement('h1')
// 태그안에 컨텐츠를 작성하고
h1Tag.innerText = 'DOM 조작'
// 부모 div 태그를 가져와서
const div = document.querySelector('div')
// div 태그의 자식 요소로 추가
div.appendChild(h1Tag)
// div의 h1 요소 삭제
div.removeChild(h1Tag)
Element.getAttribute(attributeName)Element.setAttribute(name, value)// a tag 생성 및 컨텐츠 추가
const aTag = document.createElement('a')
aTag.innerText = '구글'
// a 태그의 href 속성 추가
aTag.setAttribute('href', 'https://google.com')
console.log(aTag.getAttribute('href'))
// div 태그의 자식 태그로 a 태그 추가
const div = document.querySelector('div')
div.appendChild(aTag)
// h1 tag 선택 및 클래스 목록 조회
const h1 = document.querySelector('h1')
console.log(h1.classList) // DOMTokenList ['red', value: 'red']
// 클래스 추가
h1.classList.add('red')
// 클래스 제거
h1.classList.remove('red')
// 클래스가 존재한다면 제거하고 false를 반환,
// 존재하지 않으면 클래스를 추가하고 true를 반환
h1.classList.toggle('red')
h1.classList.toggle('blue')
console.log(h1.classList) // DOMTokenList(2) ['red', 'blue', value: 'red blue']
Element.setAttribute(name, value)Element.classList, Element.style 등을 통해 직접적으로 해당 요소의 각 속성들을 제어 할 수 있음<ul id="list">
<li class="red">apple</li>
<li>orange</li>
<li id="banana">banana</li>
<li>grape</li>
<li class="red">strawberry</li>
</ul>
// 추가할 과일 태그 만들기
const mango = document.createElement("li")
mango.innerText = '망고' // 새로 만든 li 태그에 망고 텍스트 넣어주기
const parent = document.querySelector("ul") // ul 태그 찾아오기(appendChild 쓰려면 부모 태그 찾아야 하니까..)
parent.appendChild(mango) // 찾은 부모 태그에 appendchild 이용해서 태그 추가하기
const pineapple = document.createElement("li")
pineapple.innerText = '파인애플'
parent.prepend(pineapple)
const kiwi = document.createElement("li")
kiwi.innerText = '키위'
const banana = document.querySelector("#banana")
parent.insertBefore(kiwi, banana)
const reds = document.querySelectorAll('.red')
reds.forEach(element => {
element.remove()
});
const liTags = document.querySelectorAll('li')
liTags.forEach(element => {
element.classList.add('big')
});
// Apple, Banana, Orange 각각 li 요소 만들기
const fruits = ['Apple', 'Banana', 'Orange']
fruits.forEach(function () {
})
fruits.forEach((fruit) => {
const li = document.createElement('li')
li.innerText = fruit
document.querySelector('#fruits-list').appendChild(li)
})
https://github.com/mjieun0956/TIL/tree/master/JavaScript/06.%20DOM