๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ JavaScript

[JavaScript] DOM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

by Tamii 2021. 2. 16.
๋ฐ˜์‘ํ˜•

์›นํŽ˜์ด์ง€

html, css : ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ

javascript: ๋ณด์—ฌ์ง€๋Š”๊ฒƒ ์ปจํŠธ๋กค ํ•˜๊ธฐ ์œ„ํ•จ

 

 

html

<!DOCTYPE html>

<head></head>

<body>
    <div class="parent">
        <div>child1</div>
        <div>child2</div>
        <div>child3</div>
    </div>
</body>
</html>

javascript 

const child1 ={
    nonType:1,
    nodeName: 'div'
    childNode=[],
    arrtibutes:[]
}
const parent = docuemnt.querySelector('parend')

parent.firstchild // #text
parent.childNodes // [div]
prenth.firstElementHild; // <div>child1</div>

 

html์€ javascript ์—๊ฒŒ ๊ทธ์ € ๋ฌธ์ž์ผ ๋ฟ! ->

 

โ– DOM ( Document Object Model )

html์„ javascript ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” object ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•œ ๊ฒƒ 

๊ทธ๋ ‡๊ฒŒ ์ €์žฅ๋œ ์ •๋ณด = DOM Tree

 

node ๊ฐ์ฒด๋กœ ๋ฐ”๊พธ์–ด ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ

์กฐ์ž‘ํ•˜๊ณ  ์‹ถ์€ ์†์„ฑ์„ ๊ณ ์น˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ, ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ

ํŠธ๋ฆฌ๊ตฌ์กฐ ๋งˆํฌ์—…์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๊ณ„์ ์ธ ์„ฑ๊ฒฉ์ด ์œ ์‚ฌํ•จ (ex lastChild...)

 

parse

  : ๋ฌธ์ž๋ฅผ ์˜๋ฏธ์žˆ๋Š” ๊ฐ์ฒด๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ

node

  : html์ด๋ผ๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ์š”์†Œ(?)๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ -> ์—ฌ๋Ÿฌ๊ฐœ์˜ ํƒ€์ž…์ด ์žˆ์Œ 

 

 

 

โ– Document Node

document ๋กœ element ์ฐพ๊ณ , ๋งŒ๋“ค๊ณ  ...

html ๋ฌธ์„œ ์ „๋ฐ˜์— ๋Œ€ํ•œ ์ •๋ณด 

 

document.body 

doctype : doctype์ด ๋ญ”์ง€

root node ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์ž‡๋Š” ๊ทธ๋Ÿฌํ•œ ๊ฒƒ๋“ค

 

 โˆ™ docuemnt.querySelector

 โˆ™ document.create....

 

 

โ– Element Node 

element = html tag  = ์š”์†Œ 

 

 โˆ™getAttribute() : ๊ฐ’ ์–ป๊ธฐ

 โˆ™setAttribute() : ๊ฐ’ ์ง€์ •

 โˆ™removeAttribute() : ๊ฐ’ ์ œ๊ฑฐ

โญ๏ธ classList()

       : ๋ฉ”์†Œ๋“œ ์ œ๊ณต

       : toggle, add, remove

 

โˆ™ parent.classList.toggle('bye')

'bye'๋ผ๋Š” class ๊ฐ€ ์žˆ์œผ๋ฉด ๋นผ๊ณ  ์—†์œผ๋ฉด ๋„ฃ๊ธฐ 

โˆ™ parent.innerHTML  = '<div> bye </div>'

 

 

โ– node ํƒ์ƒ‰ API 

selector ๋ฌธ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์—˜๋ฆฌ๋จผํŠธ ์ฐพ๊ธฐ

 

 

getElementById()

id ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฐพ๊ธฐ

document.getElementById("search__button")
document.getElementById("search__button").id;
document.getElementById("search__button").className;

// ํ•˜์œ„์— ์žˆ๋Š” ๊ฐ์ฒด display ์‚ญ์ œ
document.getElementById("search__button").style.display="none";

// ํ•˜์œ„ ๊ฐ์ฒด display : block ํ˜•ํƒœ๋กœ
document.getElementById("search__button").style.display="block";

// ํ•˜์œ„ ๊ฐ์ฒด์— text ๋„ฃ๊ธฐ
document.getElementById("search__button").innderText="๋ณ€ํ™”";

querySelector()

//class ๊ฒ€์ƒ‰
document.querySelector(".search__button");

//id ๊ฒ€์ƒ‰
document.querySelector("#search__button");

//body ํƒœ๊ทธ ์•ˆ์˜ a_button class
document.querySelector("body .a_button);

//a_button class ๋ฐ”๋กœ ์•ˆ์˜ aaa_btn class 
document.querySelector(".a_button > .aaa_btn);

 

โ– node ํƒ์ƒ‰ API 

<body>
	<div>hi</div>
</body>
var body = document.querySelector('body');

body.nodeType ; // 1


var div = document.querySelector('body > div');
div.nodeType ; //1

body.firstChild.nodeType ; //3

element_node: 1

 <p> <div>

text_node : 3

element ์˜ ์–ด๋– ํ•œ text

 

 


โ– DOM ํƒ์ƒ‰ 

โ–DOM ํƒ์ƒ‰

  • childNodes
  • firstChild
  • firstElementChild
  • parentElement
  • nextSibling
  • nextElementSibling

โ–DOM ์กฐ์ž‘ 

elem

  • removeChild()
  • appendChild()
  • insertBefore()
  • cloneNode()
  • replaceChild()
  • closest() //์ƒ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ๊ทผ์ ‘ ์—˜๋ฆฌ๋จผํŠธ ์ฐพ๊ธฐ

โ– appendChild ๋ฉ”์„œ๋“œ 

var div = docuemnt.createElement('div');
var str = document.TextNode('์˜ค๋Š˜ ํ•˜๋ฃจ ์งฑ์ด์•ผ');
var p = document.querySelector('p');

//div ์— str ๋„ฃ๊ธฐ
div.appendChild(str);

// p ํƒœ๊ทธ์— div  ๋„ฃ๊ธฐ 
p.appendChild(div);

โ– innerHTML ๋ฉ”์„œ๋“œ

getter & setter ์—ญํ•  ๋™์‹œ ๊ฐ€๋Šฅ

search__box class ๋‚ด  3๋ฒˆ์จฐ ์ž์‹
var base = docuemnt.querySelector("search__box tr:nth-child(3))");
serch__box class ๋‚ด table
var t = docuemnt.querySelector("search__box table");


//div ์ƒ์„ฑ 
div.appendChild(str);

// t๋‚ด์˜ base์ž๋ฆฌ ์•ž์— div ์‚ฝ์ž…
t.insertBeford(div,base)

 

โ– innerText ๋ฉ”์„œ๋“œ

getter & setter ์—ญํ•  ๋™์‹œ ๊ฐ€๋Šฅ

div์˜ text์— abc text ์ถ”๊ฐ€
div.innderText += "abc";

โ– innerAdjacentHTML ๋ฉ”์„œ๋“œ

โˆ™ brforebegin

โˆ™ afterbegin

โˆ™ beforeend

โˆ™ afterend

var base = document.querySelector('div');
base.insertAdjacentHTML('afterbegin','<h1>hi</h1>);

 

โ– template ๋ฌธ๋ฒ•์„ ์ด์šฉํ•œ html ๋ฌธ์ž์—ด ๋งŒ๋“ค๊ธฐ

${ } 

JSON + HTML  => ์ƒˆ๋กœ์šด HTML ๋ฌธ์ž์—ด ๋งŒ๋“ค๊ธฐ 

 

-> appendchild 

const data = {
	name: new Date().getDay();
}

const str = `<div><span>hi today is {data.name} </span></div>`

 

๋Œ“๊ธ€