Document Object Model
$0 는 클릭한 현재 값을 의미한다.
<div id="practice" class="highlight red">
Here is one Element
</div>
태그 이름 : div
id : practice
class : highlight, red
내용 : Here is one Element
<body>
<div id="practice" class="highlight red">
Here is one Element
<span>자식도 있습니다.</span>
<span>자식이 여러개 입니다.</span>
</div>
</body>
기준은 div
부모 엘리먼트 : body (1개)
자식 엘리먼트 : span (2개)
ex) console.log 입력시
<input id="username" type="text" placeholder="아이디를 입력하세요">
ex) console.dir 입력시
input#username
속성에 대한 값들을 구체적으로 알아볼 수 있다.
childeNodes는 자식 Element의 입력값까지 보여준다.
children은 Element가 몇개인지, 무엇인지까지만 알 수 있다.
특정 버튼을 눌렀을 때 액션이 발생한다 == 이벤트
ex) HTML
<button>Click</button>
ex) JavaScript function 생성
$0.onclick = function () {
console.log('Hello World');
}
ex) JavaScript 이벤트 구현
$0.addEventListener('click', function() {
console.log('Hello World');
}
JavaScript를 통해 특정 Element를 선택하고 가져오는 방법
현재는 querySelector 와 querySelectorAll에 대해서만 알아본다.
ex)
document.querySelectorAll('.comment')
ex)
let allComments = document.querySelectorAll('.comment')
console.log(allComments[2]);
// 이런식으로 comment class를 불러올 수 있다.
function getInputValue() {
// username을 선택한다.
// new-tweet을 선택한다.
// username의 값을 얻어온다.
// new-tweet의 값을 얻어온다.
let elUsername = document.querySelector('#username');
let elNewTweet = document.getElementById('new-tweet');
//여기서 querySelector 와 getElementById는 같은 역할을 한다.
// getElementById의 경우 #을 넣지 않는다.
console.log(elUsername.value);
console.log(elNewTweet.value);
위와 같은 방법을 통해 console 창에 출력할 수 있다.
document.querySelector('#register').onclick = getInputValue;
button 클릭 시 getInputValue를 실행하면서 값을 얻어올 수 있게 된다.
innerHTML 속성은 읽기 뿐 아니라, 쓰기도 가능한 속성입니다.
가장 쉽지만, 느리고 보안에 취약합니다. (textContent를 권장합니다.)
ex) HTML 코드
<div id="target">변경 전</div>
ex) JavaScript
let target = document.querySelector('#target');
target.innerHTML = `
<span>변경 후</span>
`;
ex) HTML 출력 결과
<div id="target">
<span>변경 후</span>
</div>
Element를 만드는 메소드는 반드시 알아야 합니다. innerHTML을 이용한 생성에 비해 다소 복잡하지만 메소드를 이용한 Element 생성은, 생성과 동시에 이벤트 핸들러 등록이 가능한 장점이 있습니다.
ex) HTML
<div id="target">변경 전</div>
ex) JavaScript
let target = document.querySelector('#target');
let newSpan = document.createElement('Span'); // span Element를 만듭니다.
newSpan.innerHTML = '변경 후';
target.appendChild(newSpan); // target 아랫쪽에 newSpan(span)을 추가합니다.
ex) HTML 출력 결과
<div id="target">
변경 전
<span>변경 후</span>
</div>
function appendNewComment() {
let li = document.createElement('li');
li.className = 'comment';
li.innterHTML = `<div class="username">KJ</div>`
let parent = document.querySelector('#view-comments')
parent.appendChild(li)
}
appendNewComment();
<template>
태그) => 숙련됐을 때 따로 연습하기HTML 조각을 HTML 내에 정의할 수 있습니다.
ex) HTML
<template id="will-be-rendered">
<span>변경 후</span>
</template>
<div id="target">변경 전</div>
ex) JavaScript
let target = document.querySelector('#target');
let template = document.querySelector('#will-be-rendered');
// #will-be-rendered 안쪽 내용을 자식 노드를 전부 포함하여 복사합니다.
let newContent = document.importNode(template.content, true);
// target 내용을 비웁니다.
target.innerHTML = '';
target.appendChild(newContent);