<script>
태그 위치는 어디에?브라우저가 웹 페이지 접속 시 서버로 요청
HTML Parsing
: 컴퓨터가 이해할 수 있는 코드로 바꾸는 작업
DOM Tree 생성
Render Tree 생성
: DOM 트리 + CSSOM(CSS Object Model)
브라우저에 출력
HTML Parsing이 안 끝났더라도 script가 로드되면 즉시 script를 실행한다
<script async src="index.js"></script>
HTML Parsing이 모두 끝나면 script가 실행된다
<script defer src="index.js"></script>
<sciprt>
태그는</body>
닫는 태그 직전에 넣는 것이 좋다
- script 삽입 위치에 따라 브라우저 렌더링, script 실행 순서에 영향이 있기 때문.
Document Object Model 문서객체모델
: HTML을 Object처럼 조작할 수 있는 Model.
이는 원본 HTML이 아니라 DOM을 조작하는 것이다
- 문서객체란?
<html>,<body>,<div>
등의 태그들을 자바스크립트에서 조작 가능한 Object로 만드는 것이다.
'노드 트리' 구조
부모는 하나고, 여러 개의 자식을 가진다
JavaScript의 일부가 아니고 Web APIs다.
document, window 개체에 대한 api를 사용한다 ex)document.body
const newDiv = document.createElement('div')
document.body.append(newDiv, 'hello', span)
// 이미 다른 부모에 위치한 자식노드를 다른 부모노드 밑으로 이동시킬때
const span = document.querySelector(‘span’);
const divB = document.querySelector(‘.b’);
// divA에 span이 이미 위치했음을 가정
divB.appendChild(span);
// divB로 span이 이동. 클론하는 것 아님
.hello
#hello
처럼 셀렉터로 해당 요소를 가져온다// <style>HTML 문서 본문에 유형이 없거나, "text/css" 유형이 있는 첫 번째 요소가 반환
var el = document.body.querySelector("style[type='text/css'], style:not([type])");
// 해당 셀럭터의 1번째만 가져오기
const title = document.querySelector('.hello h1');
// 조건 만족한 것 모두 가져오기
const title = document.querySelectorAll('div h1');
// getElementById - id를 통해 el 가져오기
const title = document.getElementById('title');
title.innerText = 'got you';
// getElementByClassName - class명으로 가져오기
const hello = document.getElementByClassName('hello');
// getElementByTagName - 태그명으로 가져오기
const hello = document.getElementByTagName('h1');
document.querySelector('#username').value = '새로운 값';
innerText, innerHTML, textContent
: 노드나 요소의 텍스트값을 읽거나 변경할 수 있다
// .textContent = '입력'
const oneDiv = document.createElement('div');
console.log(oneDiv) // <div></div>
oneDiv.textContent = 'dev';
console.log(oneDiv) // <div>dev</div>
요소에 class 추가하기
.classList.add('hello')
oneDiv.classList.add('hello')
console.log(oneDiv)
console.log(oneDiv) // <div class="hello">dev</div>
.remove()
const container = document.querySelector('#container')
const tweetDiv = document.createElement('div')
container.append(tweetDiv)
tweetDiv.remove() // 삭제
.innerHTML = '';
document.querySelector('#container').innerHTML = '';
.removeChild
// 자식요소가 없어질때까지 1번째 자식요소 삭제하기
const container = document.querySelector('#container');
while (container.firstChild) {
container.removeChild(container.firstChild);
}
const container = document.querySelector('#container');
while (container.children.length > 1) {
container.removeChild(container.lastChild);
}
.forEach
, for of문
const tweets = document.querySelectorAll('.tweet')
// 방법 1 ) forEach
tweets.forEach(function(tweet){
tweet.remove();
})
// 방법 2 ) for of
for (let tweet of tweets){
tweet.remove()
}
inputBox.classList.add('클래스명');
function handleTitleClick(){
h1.classList.toggle('clicked');
}
function handleTitleClick(){
const clickedClass = 'clicked';
if(h1.classList.contains(clickedClass)){
h1.classList.remove(clickedClass);
} else {
h1.classList.add(clickedClass);
}
}
onclick
, onmouseenter
, onkeyup
방법 1
el.onclick = function (){}
btn.onclick = function() {
console.log('버튼이 눌렸습니다!');
}
방법 2
el.onclick = handle할 함수명;
- 함수 실행()이 아니라 함수 그자체를 등록하면 된다
function handler() {
console.log('버튼이 눌렸습니다!');
}
btn.onclick = handler; // 함수 자체를 등록
el.addEventListener('event', event발생시 실행할 함수);
// 방법1
btn.addEventListener('click', function() {
console.log('버튼이 눌렸습니다!');
});
// 방법2
function handleClick() {
console.log('버튼이 눌렸습니다!');
}
btn.addEventListener('click', handleClick);
사용자의 입력(onclick, onkeyup ...)을 트리거로 발생한 이벤트 정보를 담은 객체
function handleClick(e) {
let currentMenu = e.target.textContent;
console.log(currentMenu + "를 클릭하셨습니다.");
}
https://ko.wikipedia.org/wiki/%EB%AC%B8%EC%84%9C_%EA%B0%9D%EC%B2%B4_%EB%AA%A8%EB%8D%B8