Skip to content

Latest commit

ย 

History

History
613 lines (510 loc) ยท 21.1 KB

ch39-ํ•ด์„ค.md

File metadata and controls

613 lines (510 loc) ยท 21.1 KB

Chapter39

๐Ÿ“Œ๋ฌธ์ œ1

๋‹ค์Œ ๋ฌธ์žฅ์˜ true, false๋ฅผ ํŒ๋‹จํ•˜์„ธ์š”.

(1) HTML ๋ฌธ์„œ ๋‚ด ์ค‘๋ณต๋œ id ๊ฐ’์„ ๊ฐ–๋Š” HTML ์š”์†Œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•˜๋”๋ผ๋„ ์–ด๋– ํ•œ ์—๋Ÿฌ๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
(2) ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ id ๊ฐ’์„ ๊ฐ€์ง„ HTML ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, getElementById ๋ฉ”์„œ๋“œ๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•œ๋‹ค.
(3) CSS ์„ ํƒ์ž ์ค‘ `p ~ ul {...}`์€ p ์š”์†Œ์˜ ํ˜•์ œ ์š”์†Œ ์ค‘์— p ์š”์†Œ ๋ฐ”๋กœ ๋’ค์— ์œ„์น˜ํ•˜๋Š” ul์š”์†Œ๋ฅผ ์„ ํƒํ•œ๋‹ค.
(4) querySelectorAll ๋ฉ”์„œ๋“œ๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋…ธ๋“œ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋‹ต์•ˆ ์ž‘์„ฑ

(1) : true
(2) : false
(3) : false
(4) : true
(1) : (686p) HTML ๋ฌธ์„œ ๋‚ด์— ์ค‘๋ณต๋œ id ๊ฐ’์„ ๊ฐ–๋Š” ์š”์†Œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, getElementById ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ id ๊ฐ’์„ ๊ฐ–๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 
์ฆ‰, getElementById ๋ฉ”์„œ๋“œ๋Š” ์–ธ์ œ๋‚˜ ๋‹จ ํ•˜๋‚˜์˜ ์š”์†Œ ๋…ธ๋“œ๋งŒ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ค‘๋ณต๋œ id๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•˜๋”๋ผ๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(2) : (686p) null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(3) : (692p) `p + ul {...}`์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.
`p ~ ul {...}`์€ p์š”์†Œ์˜ ํ˜•์ œ ์š”์†Œ ์ค‘์— p์š”์†Œ ๋’ค์— ์œ„์น˜ํ•˜๋Š” ul ์š”์†Œ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

(4) : (698p) HTMLCollection ๊ฐ์ฒด์˜ ๋ถ€์ž‘์šฉ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด getElementByTagName, getElementByClassName ๋Œ€์‹  querySelectorAll ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
querySelectorAll ๋ฉ”์„œ๋“œ๋Š” NodeList ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
NodeList ๊ฐ์ฒด๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋…ธ๋“œ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ childNodes ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” NodeList ๊ฐ์ฒด๋Š” live ๊ฐ์ฒด๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋…ธ๋“œ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€๊ฒฝ๊ณผ ์ƒ๊ด€ ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ DOM ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”
HTMLCollection์ด๋‚˜ NodeList ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ2

์ž์‹ ๋…ธ๋“œ ํƒ์ƒ‰์„ ์œ„ํ•œ ๋…ธ๋“œ ํƒ์ƒ‰ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

ํ”„๋กœํผํ‹ฐ์— ์•Œ๋งž๊ฒŒ ์ง์ง€์–ด ๋ณด์„ธ์š”.

(a) ์ž์‹ ๋…ธ๋“œ ์ค‘์—์„œ ์š”์†Œ ๋…ธ๋“œ๋งŒ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜์—ฌ HTMLCollection์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ด ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ HTMLCollection์—๋Š” ํ…์ŠคํŠธ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

(b) ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜์—ฌ NodeList์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ด ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ NodeList์—๋Š” ์š”์†Œ ๋…ธ๋“œ์™€ ํ…์ŠคํŠธ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

(c) ์ฒซ ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ด ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๋…ธ๋“œ๋Š” ํ…์ŠคํŠธ ๋…ธ๋“œ์ด๊ฑฐ๋‚˜ ์š”์†Œ ๋…ธ๋“œ๋‹ค.

(d) ์ฒซ ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ด ํ”„๋กœํผํ‹ฐ๋Š” ์š”์†Œ ๋…ธ๋“œ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋‹ต์•ˆ ์ž‘์„ฑ

Node.prototype.childNodes : (b)
Element.prototype.children : (a)
Node.prototype.firstChild : (c)
Element.prototype.firstElementChild : (d)

๐Ÿ“Œ๋ฌธ์ œ3

๋‹ค์Œ ๋ฌธ์žฅ์˜ true, false๋ฅผ ํŒ๋‹จํ•˜์„ธ์š”.

(1) ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ํ…์ŠคํŠธ ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.
(2) Node.ELEMENT_NODE๋Š” ์š”์†Œ ๋…ธ๋“œ ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜๋กœ 3์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
(3) ์š”์†Œ ๋…ธ๋“œ์˜ textContent ํ”„๋กœํผํ‹ฐ์— ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•  ๋•Œ, HTML ๋งˆํฌ์—…์€ ํŒŒ์‹ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ต์•ˆ ์ž‘์„ฑ

(1) : true
(2) : false
(3) : true
(1) : (707p) ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” DOM ํŠธ๋ฆฌ์˜ ์ตœ์ข…๋‹จ ๋…ธ๋“œ์ด๋ฏ€๋กœ, ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ํ…์ŠคํŠธ ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

(2) : (709p) 1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Node.TEXT_NODE๊ฐ€ ํ…์ŠคํŠธ ๋…ธ๋“œ ํƒ€์ž…์„๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜๋กœ 3์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(3) :(713p)
์š”์†Œ ๋…ธ๋“œ์˜ textContent ํ”„๋กœํผํ‹ฐ์— ๋ฌธ์ž์—ด์„ ํ• ๋‹นใ…‡ํ•˜๋ฉด ์š”์†Œ ๋…ธ๋“œ์˜ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ํ• ๋‹นํ•œ ๋ฌธ์ž์—ด์ด ํ…์ŠคํŠธ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
์ด ๋•Œ ํ• ๋‹นํ•œ ๋ฌธ์ž์—ด์— HTML ๋งˆํฌ์—…์ด ํฌํ•จ๋˜์–ด ์žˆ๋”๋ผ๋„ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ์ธ์‹๋˜์–ด ํ…์ŠคํŠธ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.
์ฆ‰ HTML ๋งˆํฌ์—…์ด ํŒŒ์‹ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ”— ๋…ธ๋“œ ํƒ€์ž… ์ƒ์ˆ˜ https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType


๐Ÿ“Œ๋ฌธ์ œ4

๋‹ค์Œ์˜ ์ฝ˜์†” ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app"></div>

    <ul id="abc">
        <li>A</li>
        <li>B</li>
        <li>C</li>
    </ul>
</body>
<script>
    console.log(app); 
    var app = 1;
    console.log(app);

    const $abc = document.querySelector('#abc');
    console.log($abc.childNodes.length);
    console.log($abc.children.length);
</script>
</html>

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1) undefined
(2) 1
id๊ฐ’๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ์ž๋™์œผ๋กœ ํ• ๋‹น๋˜๊ณ  ํ•ด๋‹น ๋…ธ๋“œ ๊ฐ์ฒด๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€์ง€๋งŒ 
script ์•ˆ์— ํ•ด๋‹น ์‹๋ณ„์ž์˜ ์ด๋ฆ„์œผ๋กœ์„ค์ •๋œ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ๋…ธ๋“œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค. 
(3) 7
(4) 3
Node.prototype.childNodes์€ ์š”์†Œ ๋…ธ๋“œ์™€ ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , 
Element.prototype.children์€ ์š”์†Œ ๋…ธ๋“œ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

๐Ÿ“Œ๋ฌธ์ œ5

๋‹ค์Œ HTML์˜ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฌผ์„ ์˜ˆ์ธกํ•ด๋ณด์„ธ์š”

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
.green {
    color : green;
}
.blue {
    color : blue;
}
        
</style>
<body>
    <div class="green">a</div>
    <div class="green">b</div>
    <div class="green">c</div>
</body>
<script>
    let $items = document.querySelectorAll('.green');
    console.log($items);
    for(let i =0; i < $items.length; i++){
        $items[i].className = "blue";
    }

    $items = document.getElementsByClassName('blue'); 
    console.log($items);

    for(let i =0; i < $items.length; i++){
        $items[i].className = "green";
    }
</script>
</html>

์ •๋‹ต ๋ฐ ํ•ด์„ค

์ดˆ๋ก์ƒ‰ a
ํŒŒ๋ž‘์ƒ‰ b
์ดˆ๋ก์ƒ‰ c

HTMLCollection์€ ๋…ธ๋“œ์˜ ๊ฐ์ฒด ์ƒํƒœ๋ณ€ํ™”๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•˜๋Š” ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด์ด๊ณ , 
Nodelist๋Š” childNodes ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” NodeList ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ์ด์ƒ none-alive ๊ฐ์ฒด์ด๋‹ค.
๋”ฐ๋ผ์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— $items์˜ ์ธ๋ฑ์Šค๊ฐ€ 3 => 2๋กœ ๋ณ€ํ™”ํ•ด 1, 3๋ฒˆ์งธ ์š”์†Œ๋งŒ
๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

๋‘˜ ๋‹ค ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•  ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

๐Ÿ“Œ๋ฌธ์ œ6

๋‹ค์Œ์„ ์ฝ๊ณ  true or false๋ฅผ ํŒ๋‹จํ•˜์„ธ์š”

(1) getElementById๋กœ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ํ•ด๋‹น id ๊ฐ’์„ ๊ฐ€์ง„ ์š”์†Œ๊ฐ€ ํ•œ ๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด 
์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
(2) Node.prototyle.nextSibling์€ ํ˜•์ œ ๋…ธ๋“œ ์ค‘์—์„œ ๋‹ค์Œ ํ˜•์ œ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 
(3)๋…ธ๋“œ ํƒ์ƒ‰ ํ”„๋กœํผํ‹ฐ๋Š” ์ฝ๊ธฐ ์ „์šฉ ์ ‘๊ทผ์ž ํ”„๋Ÿฌํผํ‹ฐ์ด๊ณ , ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. 

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1) false
getElementById๋กœ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ํ•ด๋‹น id ๊ฐ’์„ ๊ฐ€์ง„ ์š”์†Œ๊ฐ€ ํ•œ ๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด 
์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋งจ ์ฒ˜์Œ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. 
(2) false
Node.prototype.nextSibling์€ ํ˜•์ œ ๋…ธ๋“œ ์ค‘์—์„œ ๋‹ค์Œ ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์š”์†Œ ๋…ธ๋“œ์ผ ์ˆ˜๋„ ์žˆ๊ณ 
ํ…์ŠคํŠธ ๋…ธ๋“œ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 
Element.prototype.nextElementSibling์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
(3) false
๋…ธ๋“œ ํƒ์ƒ‰ ํ”„๋กœํผํ‹ฐ๋Š” ์ฝ๊ธฐ ์ „์šฉ ์ ‘๊ทผ์ž ํ”„๋Ÿฌํผํ‹ฐ์ด๊ณ , ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ7

๊ฐ ๋ณด๊ธฐ์˜ true, false๋ฅผ ํŒ๋‹จํ•˜์‹œ์˜ค.

(1) : ๋ฌธ์„œ ๋…ธ๋“œ(document ๊ฐ์ฒด)๋Š” html๋ฌธ์„œ์˜ <html>๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
(2) : ๋…ธ๋“œ ๊ฐ์ฒด๋Š” 4๊ฐ€์ง€(๋ฌธ์„œ ๋…ธ๋“œ, ์š”์†Œ ๋…ธ๋“œ, ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ, ํ…์ŠคํŠธ ๋…ธ๋“œ)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
(3) : textContent ํ”„๋กœํผํ‹ฐ์— ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•˜๋ฉด ํ…์ŠคํŠธ๋กœ ์ถ”๊ฐ€๋˜์–ด์„œ HTML ๋งˆํฌ์—…์ด ํŒŒ์‹ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1) : false (p680)
๋ฌธ์„œ๋…ธ๋“œ(Document ๊ฐ์ฒด)๋Š” DOM ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ์ด๊ณ , <html>์€ HTML ๋ฌธ์„œ์˜ ๋ฃจํŠธ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

(2) : false (p680, p709)
๊ต์žฌ p680์—์„œ 12์ข…๋ฅ˜๋ผ๊ณ  ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  12๊ฐœ์˜ ๋…ธ๋“œ ํƒ€์ž…์€ p709๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ nodeType์— ์˜ํ•ด 12์ข…๋ฅ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋งํฌ ์ฐธ๊ณ )

(3) : true (p713)
textContent์— ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•˜๋ฉด ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
๋ฌธ์ž์—ด์— html ํƒœ๊ทธ๊ฐ€ ์žˆ์–ด๋„ ํŒŒ์‹ฑ๋˜์ง€ ์•Š๊ณ  ๋ฌธ์ž์—ด๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ8

๋…ธ๋“œ(Node)์™€ ์š”์†Œ(Element)๊ฐ€ ๋™์ผํ•œ ์ง€ ํŒ๋‹จํ•˜์‹œ์˜ค. ๋‹ค๋ฅด๋‹ค๋ฉด ์ฐจ์ด์ ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

๋…ธ๋“œ์™€ ์š”์†Œ๋Š” ๋™์ผํ•˜์ง€ ์•Š๋‹ค.

๋…ธ๋“œ(Node)๋Š” ์—ฌ๋Ÿฌ DOM ํƒ€์ž…์ด ์ƒ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
๋Œ€ํ‘œ์ ์ธ ํ”„๋กœํผํ‹ฐ๋กœ baseURI, childNodes, firstChild, textContent ๋“ฑ์ด ์žˆ๋‹ค.
๋ฉ”์„œ๋“œ๋กœ๋Š” appendChild(), hasChildNodes(), removeChild() ๋“ฑ์ด ์žˆ๋‹ค.

์š”์†Œ(Element)๋Š” Document ๊ฐ์ฒด ์•ˆ์˜ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ƒ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
๋Œ€ํ‘œ์ ์ธ ํ”„๋กœํผํ‹ฐ๋กœ classList, innerHTML, tagName ๋“ฑ์ด ์žˆ๋‹ค.
๋ฉ”์„œ๋“œ๋กœ๋Š” addEventListener(), closest(), querySelector() ๋“ฑ์ด ์žˆ๋‹ค.

์š”์†Œ๋Š” ๋…ธ๋“œ๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ9

HTMLCollection๊ณผ NodeList์˜ ์ฐจ์ด์ ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

๋ชจ๋‘ DOM API๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ DOM ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด์ด๋‹ค.
๋˜ํ•œ ๋ชจ๋‘ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ด๋ฉด์„œ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‹ค.

HTMLCollection
ํ•ญ์ƒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•˜๋Š” ๊ฐ์ฒด์ด๋ฏ€๋กœ ์ˆœํšŒ๋ฅผ ํ•˜๋ฉด์„œ HTMLCollection์˜ ๋…ธ๋“œ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๋Œ€๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์ด๋‚˜ Array.from()์œผ๋กœ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

NodeList
childNodesํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์„ ๋ฐ˜์˜ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์ด๋ฏ€๋กœ ์ž์œ ๋กญ๊ฒŒ ์ˆœํšŒํ•˜๊ณ  ๋…ธ๋“œ๋ฅผ ์ œ์–ดํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ10

๋ชจ๋“  ๋…ธ๋“œ๊ฐ์ฒด์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ด์œ ์—๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.

๋‹ต์•ˆ์ž‘์„ฑ

๋ชจ๋“  ๋…ธ๋“œ๊ฐ์ฒด๋Š” EventTarget์„ ์ƒ์†๋ฐ›๊ธฐ๋•Œ๋ฌธ์— EventTarget์— ์ •์˜๋œ addEventListener๋ฉ”์„œ๋“œ๋ฅผํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ11

์ฑ…์—์„  HTMLCollection๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋Š”๋ฐ, ๊ทธ ์ด์œ ์—๋Œ€ํ•ด์„œ ์„œ์ˆ ํ•˜๊ณ (1) HTMLCollection๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” DOM API(2)๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.

๋‹ต์•ˆ์ž‘์„ฑ

(1) HTMLCollection๊ฐ์ฒด๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋…ธ๋“œ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•˜๋Š” live DOM ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ž‘์„ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. ๋”ฐ๋ผ์„œ ์ข€๋” ์•ˆ์ „ํ•˜๊ฒŒ HTMLCollection๊ฐ์ฒด๊ฐ€ ์ดํ„ฐ๋Ÿฌ๋ธ”์ž„์„ ๊ฐ์•ˆํ•˜์—ฌ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•์œผ๋กœ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ›„ ์œ ์šฉํ•œ ๋ฐฐ์—ด์˜ ๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž. 

(2) getElementsByTagName, getElementsByClassName

๐Ÿ“Œ๋ฌธ์ œ12

์ถœ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•˜์„ธ์š”.

    <div class="container">
      ํ…์ŠคํŠธ
      <div></div>
    </div>
    <script>
      const $container = document.querySelector(".container");

      console.log($container.nodeValue); // (1)
      console.log($container.textContent[0]); // (2)
      console.log($container.innerText[0]); // (3)
    </script>

๋‹ต์•ˆ์ž‘์„ฑ

(1) null
(2) 
(3) ํ…

๐Ÿ“Œ๋ฌธ์ œ13

true or false

 - HTML5๋Š” innerHTML ํ”„๋กœํผํ‹ฐ๋กœ ์‚ฝ์ž…๋œ script์š”์†Œ ๋‚ด์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. 
 - DOcument.prototype.createElement(tagName) ๋ฉ”์„œ๋“œ๋กœ ์š”์†Œ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฆฌํ”Œ๋กœ์šฐ,๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
 - Document.prototype.createDocumentFragment ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ ํƒœ๊ทธ๊ฐ€ ๋”์— ์ถ”๊ฐ€๋˜๋Š”๊ฒƒ์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋‹ต์•ˆ์ž‘์„ฑ

(1) true - p.717
(2) false - ์ดํ›„  Node.prototype.appendChild๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ณ„๋„๋กœ DOM์— ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์น ๋•Œ ๋ฆฌํ”Œ๋กœ์šฐ,๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
(3) true - p.726

๐Ÿ“Œ๋ฌธ์ œ14

true or false

- HTMLํƒœ๊ทธ(div,span,inputโ€ฆ)์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ๋ณ€ํ™˜๋œ DOM์š”์†Œ์˜ ํ”„๋กœํผํ‹ฐ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.
- HTMLํƒœ๊ทธ(div,span,inputโ€ฆ)์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ์—ญํ• ์€ ๋ณ€ํ™˜๋œ DOM์š”์†Œ์˜ ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค.
- ๋ชจ๋“  DOMํ”„๋กœํผํ‹ฐ๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์—์˜ํ•ด ๋ณ€๊ฒฝ๋œ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

๋‹ต์•ˆ์ž‘์„ฑ

(1) false - attribuesํ”„๋กœํผํ‹ฐ๋กœ ์ ‘๊ทผ๊ฐ€๋Šฅ.
(2) true - p. 738 
(3) false - ์‚ฌ์šฉ์ž ์ž…๋ ฅ์—์˜ํ•œ ์ƒํƒœ ๋ณ€ํ™”์™€ ๊ด€๋ จ์žˆ๋Š” DOMํ”„๋กœํผํ‹ฐ๋งŒ ์ตœ์‹  ์ƒํƒœ ๊ฐ’์œผ๋กœ ์œ ์ง€.

๐Ÿ“Œ๋ฌธ์ œ15

true or false ๋ฅผ ๊ณ ๋ฅด์‹œ์˜ค

1. innerHTML = โ€˜<div>1<div>โ€™; innerHTML += โ€˜<div>2<div>โ€™; ์ผ๋•Œ <div>1<div>์€ ์œ ์ง€ํ•˜๊ณ  ์ƒˆ๋กœ์šด div์š”์†Œ๋งŒ ์ถ”๊ฐ€๋œ๋‹ค.
2. ๋ชจ๋“  HTML ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” DOM ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„๋‹ค. 
3. ์š”์†Œ ๋…ธ๋“œ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋Š” DOM ๋…ธ๋“œ๊ฐ€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ตœ์‹  ์ƒํƒœ๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค.

###๋‹ต์•ˆ ์ž‘์„ฑ

(1) false
innerHTML ํ”„๋กœํผํ‹ฐ๋Š” HTML ๋งˆํฌ์—… ๋ฌธ์ž๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ ์š”์†Œ ๋…ธ๋“œ์˜ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ• ๋‹นํ•œ HTML ๋งˆํฌ์—… ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ๋ณ€๊ฒฝํ•œ๋‹ค. 
(2) false
๋Œ€๋ถ€๋ถ„์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” DOM ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€์ง€๋งŒ ์˜ˆ์™ธ๋„ ์กด์žฌํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด textContent ํ”„๋กœํผํ‹ฐ๋Š” ๋Œ€์‘ํ•˜๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค. 
(3) false
์š”์†Œ ๋…ธ๋“œ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๊ฐ€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ตœ์‹  ์ƒํƒœ๋Š” DOM ๋…ธ๋“œ๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ16

๋‹ค์Œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•˜์‹œ์˜ค

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
        <div id="app"></div>
    <script>
        const $app = document.querySelector("#app");
        $app.innerHTML = '<script>alert("hello")</script>'
        $app.innerHTML = `<img src='x' onerror="alert('bye')"/>`;
    </script>
</body>
</html>

๋‹ต์•ˆ ์ž‘์„ฑ

alert('bye') ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. script ํƒœ๊ทธ๋Š” html5์—์„œ๋Š” ๋ง‰์•„์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , 
์ด๋ฏธ์ง€์˜ onerror๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์„ ๋•Œ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์œผ๋กœ, ์ฝ”๋“œ์—์„œ ์ด๋ฏธ์ง€๋ฅผ 
๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— onerror ์•ˆ์˜ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, 
innerHTML์€ xss๊ณต๊ฒฉ์— ์œ„ํ—˜ํ•˜๋‹ค. 

๐Ÿ“Œ๋ฌธ์ œ17

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  app์˜ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•˜์‹œ์˜ค

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
        <div id="app" style="width : 100px; height : 100px"></div>
    <script>
        const $app = document.querySelector("#app");
        $app.style.backgroundColor = "red";
        console.log($app.style.backgroundColor); // (3)
        console.log($app.style.opacity); // (4)
    </script>
    <style>
        #app {
            background-color: blue;
            height : 200px;
            opacity: 0.5;
        }
    </style>
</body>
</html>

๋‹ต์•ˆ ์ž‘์„ฑ

(1) width : 100px
(2) height : 100px
(3) background-color : red
style ํ”„๋กœํผํ‹ฐ๋Š” ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋กœ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ css ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„์— ์žˆ๋‹ค. 

(4) - 1 ์ฝ˜์†” ๊ฒฐ๊ณผ : red
(4) - 2 ์ฝ˜์†” ๊ฒฐ๊ณผ : ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ 
style ํ”„๋กœํผํ‹ฐ๋Š” ์ธ๋ผ์ธ ์Šคํƒ€์ผ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค๋ฅผ ์ ์šฉํ•œ ์Šคํƒ€์ผ์ด๋‚˜ 
์ƒ์†์„ ํ†ตํ•ด ์•”๋ฌต์ ์œผ๋กœ ์ ์šฉ๋œ ์Šคํƒ€์ผ์€ style ํ”„๋กœํผํ‹ฐ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค. 
๋”ฐ๋ผ์„œ html ์š”์†Œ์— ์ ์šฉ๋˜์–ด์žˆ๋Š” ๋ชจ๋“  css ์Šคํƒ€์ผ์„ ์ฐธ์กฐํ•ด์•ผํ•  ๊ฒฝ์šฐ getComputedStyle
๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•œ๋‹ค. 

๐Ÿ“Œ๋ฌธ์ œ18

innerHTML, insertAdjacentHTML์€ ์™œ XSS(Cross-Site Scripting)์— ์ทจ์•ฝํ•œ์ง€ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

์ •๋‹ต : ๋ฐ์ดํ„ฐ(htmlString)์„ ํŒŒ์‹ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋‘ ํ‚ค์›Œ๋“œ๋Š” ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ(htmlString)์„ ํŒŒ์‹ฑํ•˜์—ฌ document์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์‹ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ์•…์„ฑ script๋ฅผ ์ฃผ์ž…ํ•˜๋Š” XSS ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด HTML5๋ถ€ํ„ฐ๋Š” ๋ฐ์ดํ„ฐ(htmlString)์— script ํƒœ๊ทธ๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒฝ์šฐ ์‹คํ–‰ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ <img src='x' onerror='alert(1)'> ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ง‰์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํ•ด๋‹น ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์–‘ํ•˜์‹œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ19

๊ต์žฌ์—์„œ ์š”์†Œ ๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ 2๊ณณ์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ƒํƒœ๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๊ฐ€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ตœ์‹  ์ƒํƒœ๋Š” DOM ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์™œ 2๊ฐ€์ง€ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ด์œ ๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ์›นํŽ˜์ด์ง€๋ฅผ ์ฒ˜์Œ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ๊ณ ์นจํ•  ๋•Œ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ฅธ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฉด์„œ, ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • p739

๐Ÿ“Œ๋ฌธ์ œ20

๋…ธ๋“œ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ค‘์— insertBefore๋ฅผ ์ด์šฉํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ์ด๋™ํ•˜๋ฉด ์•„๋ž˜์˜ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์—์„œ ์–ด๋Š ๋ถ€๋ถ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š”์ง€ ๊ณ ๋ฅด์‹œ์˜ค.

(1) : DOM tree
(2) : CSSOM tree
(3) : Render tree
(4) : Layout (Reflow)
(5) : Paint (Repaint)

์ •๋‹ต ๋ฐ ํ•ด์„ค

Layout
๋…ธ๋“œ์˜ ์ด๋™๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ถ”๊ฐ€, ์‚ญ์ œ, ๋ณ€๊ฒฝ ๋“ฑ ๋…ธ๋“œ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด Layout(Reflow)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๋‹ค๋งŒ, DOM tree์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜์ง€๋งŒ ๋‹ค์‹œ DOM tree๋ฅผ ๋งŒ๋“ค์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ21

innerHTML ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ DOM ์กฐ์ž‘์€ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด์ง€๋งŒ ๋‹ค์–‘ํ•œ ๋‹จ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

innerHTML ํ”„๋กœํผํ‹ฐ์˜ ๋‹จ์ ์— ๋Œ€ํ•ด ์•„๋Š” ๋Œ€๋กœ ์„ค๋ช…ํ•˜์„ธ์š”.

๋‹ต์•ˆ ์ž‘์„ฑ

(1) : ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ… ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค.
(2) : ์š”์†Œ ๋…ธ๋“œ์˜ innerHTML ํ”„๋กœํผํ‹ฐ์— HTML ๋งˆํฌ์—… ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ,
์š”์†Œ ๋…ธ๋“œ์˜ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ• ๋‹นํ•œ HTML ๋งˆํฌ์—… ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
(3) : ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ ์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ22

๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

<html>
    <head>
        <style>
            .box{
                width: 100px;
                height: 100px;
                background-color: royalblue;
            }
            .red { color: red}
            .blue {color: blue}
        </style>
    </head>
<body>
    <div class="box red">Hello!</div>
    <script>
        const $box=document.querySelector('red')
    </script>
</body>
</html>
(1) $box.classList.add('DeepDive');
(2) $box.classList.contains('box');
(3) $box.classList.remove('blue');

๋‹ต์•ˆ ์ž‘์„ฑ

(1) : add ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ 1๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์„ class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    : class = "box red DeepDive"
(2) : contains ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋ฉด ํด๋ž˜์Šค๊ฐ€ class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    : true
(3) : ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ 1๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์—์„œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    : ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์—†์œผ๋ฉด ์—๋Ÿฌ ์—†์ด ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
    : class = "box blue"

๐Ÿ“Œ๋ฌธ์ œ23

๋‹ค์Œ ์ฝ”๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๊ทธ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜์„ธ์š”.

<html>
<body>
    <div>test</div>
    <ul id="fruits">
        <li>Apple</li>
        <li>Banana</li>
    </ul>
    <script>
        const $fruits = document.getElementById('fruits')
        const $li = document.createElement('li')
        $li.appendChild(document.createTextNode('Orange'))
        $fruits.insertBefore($li, document.querySelector('div')) // (1)
    </script>
</body>
</html>

๋‹ต์•ˆ ์ž‘์„ฑ

DOMException
insertBefore ๋ฉ”์„œ๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋…ธ๋“œ๋ฅผ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋…ธ๋“œ ์•ž์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ ๋ฐ›์€ ๋…ธ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ insertBefore ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰ $fruits ์š”์†Œ์˜ ์ž์‹๋…ธ๋“œ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.