๐Ÿงพ DOM & Event

Dayยท2022๋…„ 4์›” 6์ผ
0
post-thumbnail

๐Ÿ“‚ DOM ( Document Object Model)

์›นํŽ˜์ด์ง€์˜ HTML ์„ ๊ณ„์ธตํ™” ์‹œ์ผœ์„œ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ๋งŒ๋“  ๊ฐ์ฒด(Object).
Javascript๋Š” ์ด model๋กœ ์›น ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๊ณ  ํŽ˜์ด์ง€๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

HTML์ธ ์›น ํŽ˜์ด์ง€์™€ ์Šคํฌ๋ฆฝํŒ…์–ธ์–ด(Javascript)๋ฅผ ์„œ๋กœ ์ž‡๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ด๋Ÿฐ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ƒ๊ฒผ๋‹ค.

๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๊ฐœ๋…์ด object(๊ฐ์ฒด) ๋ผ์„œ ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋˜์–ด ์žˆ์Œ.

์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ• ๋˜ํ•œ ๊ฐ์ฒด๋ž‘ ๊ฐ™๋‹ค. (key. value)

Dot Notation์„ ์ฃผ๋กœ ์“ด๋‹ค. ์งง์•„์„œ.

๐Ÿ—ƒ Document.querySelector

document.querySelector(".link_main");

๋กœ ์“ฐ๊ฑฐ๋‚˜,

 document.getElementByClassName("link_main")[0];

์ด๋ ‡๊ฒŒ ์จ๋„ ๋จ.

~์•ˆ์— ์žˆ๋Š” ์ด๋ฏธ์ง€ ์ฐพ์„ ๋•Œ,

document.querySelector('.link_main img');

ํ˜น์€

const main = document.getElementByClass('link')[0];
main.querySelector('img');

/* ๋’ค์— ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค ์ ๋Š” ์ด์œ ๋Š”. 
ํด๋ž˜์Šค๋Š” ์•„์ด๋””๋ž‘ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค ์•ˆ์“ฐ๋ฉด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•จ.
 ๋ช‡๋ฒˆ์งธ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ• ๊ฑด์ง€ ์จ์ค˜์•ผํ•จ.
 
 (์‹ค์ œ๋กœ๋Š” ๋ฐฐ์—ด์ด ์•„๋‹˜. ์œ ์‚ฌ๋ฐฐ์—ด ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋‚˜์ค‘์— ์•Œ๋ฉด ๋จ)*/

ํŠน์ • ์š”์†Œ์— ์ ‘๊ทผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ๋‹ค.

๊ฒฐ๊ณผ๋Š” ๊ฐ™์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ œํ•œ์ ์ธ ๋ถ€๋ถ„์— ์‚ฌ์šฉ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์Œ.

querySelector ๋ณด๋‹ค getElementBy ๋กœ ํŠน์ • id๊ฐ’์— ์ ‘๊ทผํ•˜๋Š”๊ฒŒ ๋น ๋ฅด๋‹ค๊ณ  ๋งํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์˜๊ฒฌ์ด ๋ถ„๋ถ„ํ•จ

๋‹ค ์จ๋ณด๋ฉด ์•ˆ๋‹ค.

querySelector ์‚ฌ์šฉํ•˜๋ฉด,

document.querySelector(".link_main img") ์ด๋Ÿฐ ์‹์œผ๋กœ 
~ ์•ˆ์˜ ์ด๋ฏธ์ง€ ์ด๋ ‡๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ. 
img ์— ํด๋ž˜์Šค๋‚˜ id๊ฐ€ ๋ถ€์—ฌ ์•ˆ๋˜์–ด์žˆ์–ด๋„ ~์•ˆ์˜ ~ ์ด๋ ‡๊ฒŒ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค .

class๋ž‘ querySelector ์‚ฌ์šฉํ•  ๋•Œ .

const main = document.getElelmentsByClassName("link_main")[0];

//ํ•˜๊ณ , 

main.queryselector("img")

ํ•ด๋„ ๋จ. ๋ณต์žกํ•ด์ง€๋ฉด ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ ์„œ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ.

getElementById๋Š” ์ฃผ์ฒด๊ฐ€ ๋ฐ˜๋“œ์‹œ document ์—ฌ์•ผ๋งŒ ํ•œ๋‹ค.

์ด๊ฑฐ๋Š” ์•„์ด๋””๊ฐ€ ์—†๊ฑด ์žˆ๊ฑด main.getElementById ์ด๋ ‡๊ฒŒ๋Š” ๋ชป์“ด๋‹ค.

const logo = document.querySelector(".link_main img"); 

// ํ•ด๋†“๊ณ  

logo.style.backgroundColor= "yellow";

ํ•˜๋ฉด ๋จ
 document.body.innerHTML = "๋‚ด์šฉ ๋‹ค ๋ฐ”๊ฟˆ"; 
 // ํƒœ๊ทธ ๋‚ด์— ์—„์ฒญ ๋งŽ์€ ์š”์†Œ๊ฐ€ ์žˆ์–ด๋„ innerHTML  ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด์šฉ์ „๋ถ€๊ฐ€ ๊ต์ฒด๋จ.
let blueElement = document.querySelector('blue');
blueElement.style.backgroundColor = 'blue';

// ์ด๋ ‡๊ฒŒ ํŠน์ • element ์— ์ ‘๊ทผํ•ด์„œ ์Šคํƒ€์ผ ์ˆ˜์ •๋„ ๊ฐ€๋Šฅ

Javascript์—์„œ style ์ˆ˜์ •ํ• ๋•Œ - ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

Object์—์„œ ํ”„๋กœํผํ‹ฐ ๋ช…์— - ์‚ฌ์šฉ ๋ชปํ•˜๋Š” ๊ฑฐ๋ž‘ ๊ฐ™์Œ.

camelCase๋กœ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค.

.createElement(tagName): ์š”์†Œ(element)๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
์–ด๋”” ๋“ค์–ด๊ฐ€์•ผ ํ•  ์ง€ ์ง€์ •ํ•ด ์ค€ ๊ฒƒ์€ ์•„๋‹ˆ๋ผ์„œ, ๋งŒ๋“  ํ›„์—๋Š” ์–ด๋”˜๊ฐ€์˜ element์— append ์‹œ์ผœ์ค˜์•ผ ํ•œ๋‹ค.

.innerHTML : ๋‚ด์šฉ์„ ํ‘œ์‹œํ•œ๋‹ค. ์ „๋ถ€ ์ƒˆ๋กœ ์จ์ง„ ๊ฑธ๋กœ ๋Œ€์ฒด์‹œํ‚ด.
.appendChild : ์š”์†Œ์˜ ๋’ค์ชฝ์— ๋ถ™์—ฌ์ค€๋‹ค ย (ํ…์ŠคํŠธ๋Š” ๋ชป๋“ค์–ด๊ฐ)

/* getElementByClassName์œผ๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋’ค์—.
innerHTML๋กœ ๋‚ด์šฉ ๋ฐ”๊ฟ”๋ฒ„๋ฆผ
className ์œผ๋กœ ํด๋ž˜์Šค ์ด๋ฆ„ ๋ฐ”๊ฟˆ*/


/*createElement๋กœ ๊ฐ๊ฐ์„ ๋งŒ๋“  ๋‹ค์Œ,
innerHTML ๋กœ ๋‚ด์šฉ ๋ฐ”๊พธ๊ณ 
appendChild๋กœ ์š”์†Œ ๋’ค์— ๋ถ™์—ฌ์ค€๋‹ค.*/

๐Ÿ–ฅ Event

interaction

์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ

๋“ฑ ๋‹ค์–‘ํ•˜๋‹ค. ๋‹ค ์•Œ ํ•„์š” ์ „ํ˜€ ์—†๋‹ค. ํ•„์š”ํ•˜๋‹ค ์‹ถ์œผ๋ฉด ๊ตฌ๊ธ€๋งํ•  ๋•Œ
mdn event ์ด๋Ÿฐ์‹์œผ๋กœ ์ณ๋„ ๋‚˜์˜ด ๊ฑฐ์˜ ์“ฐ๋Š” ๊ฒƒ๋งŒ ์“ด๋‹ค.

addEventListener

์ด๋ฒคํŠธ๋ฅผ ๋“ฃ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ

ํŠน์ • ์š”์†Œ์— addEventListener ํ•จ์ˆ˜ ๋ถ™์ด๊ณ (ํ˜ธ์ถœํ•˜๊ณ ),
์ธ์ž๋กœ ์ด๋ฒคํŠธ ์ข…๋ฅ˜์™€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ํ•จ์ˆ˜ ์ „๋‹ฌํ•œ๋‹ค.

๋‹ค์‹œ๋งํ•˜๋ฉด, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ๋„˜๊ธด ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

ํ•จ์ˆ˜๋„ ์ธ์ž๋กœ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ํ•จ์ˆ˜๋ฅผ callback ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.

์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ๋ฐ”๋กœ ์‹คํ–‰ ์•ˆ๋จ. ์ด๋ฒคํŠธ ์ข…๋ฅ˜( ex ํด๋ฆญ) ์— ๋”ฐ๋ผ.

ํด๋ฆญ ๋์„๋•Œ ๋‚˜์ค‘์— ๋ถˆ๋ ค์„œ ์‹คํ–‰์ด ๋œ๋‹ค~ ์ด๋Ÿฐ ๋œป

addEventListener ์— ์ž์ฃผ ์“ฐ์ด๋Š” ์ด๋ฒคํŠธ๋“ค

- click
- contextmenu
- dblclick
- mousedown
- mouseenter
- mouseleave
- mousemove
- mouseover
- mouseout
- mouseup
- pointerlockchange
- pointerlockerror
- select
- wheel

์ œ์ผ ๋งŽ์ด ์“ฐ๋Š” ๊ฑด click

event ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์•ž์—์„œ ๋ฐฐ์› ๋˜ DOM์„ ์‚ฌ์šฉํ•œ๋‹ค.

const thisIsButton = document.getElementsByClassName('login-btn')[0];

thisIsButton.addEventListener('click', function() {
  const password = document.getElementById('password').value;
  const rePassword = document.getElementById('re-password').value;

  if (!password) {
    alert('๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!');
    return;      // !password๊ฐ’์ด true์ด๋ฉด, ์ด๋‹ˆ๊นŒ password๊ฐ’์ด false๋ฉด,
  }
  
  if (!rePassword) {
    alert('๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!');
    return;
  }
  
  if (password !== rePassword) {
    alert('๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค!');
    return;
  }
  
  alert('ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต!!');
});

return ์—ญํ• ์€ ๋ฐ˜ํ™˜๊ณผ ์ข…๋ฃŒ

if 3๋ฒˆ ์“ฐ๊ณ  ๋งˆ์ง€๋ง‰์€ ๊ทธ๋ƒฅ ์“ฐ๋Š” ๊ฑฐ๋Š”
if else if else if else
์ด๋Ÿฐ๊ฑฐ๋ž‘ ์™„์ „ํžˆ ๋˜‘๊ฐ™์Œ

return์€ ํ•จ์ˆ˜์—์„œ ํ•จ์ˆ˜ ์ข…๋ฃŒ๋ผ์„œ ๊ทธ ๋‹ค์Œ๊ฑธ๋กœ ์ง„ํ–‰์ด ์•ˆ๋œ๋‹ค.
๋ฆฌํ„ด์€ callback ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ ์‹œํ‚ค๋Š” ๊ฑฐ๋‹ค ๋ผ๋Š”๊ฒŒ ์ค‘์š”

(break ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ํ•œ๋ฒˆ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Œ )

key event

  • ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” keydown
  • ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆŒ๋Ÿฌ ์–ด๋–ค ํ…์ŠคํŠธ๊ฐ€ ์ž‘์„ฑ๋˜๋Š” ์ˆœ๊ฐ„ ๋ฐœ์ƒํ•˜๋Š” keypress
  • ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆ„๋ฅด๊ณ  ๋–ผ๋Š” ์ˆœ๊ฐ„ ๋ฐœ์ƒํ•˜๋Š” keyup
 const thisIsPw = document.getElementById('password');
 //getElementByClass ํ• ๋•Œ๋Š” ๋’ค์— [0] ๊ฐ™์ด index๋„ฃ์–ด์คฌ์–ด์•ผํ–ˆ๋Š”๋ฐ,
 //id๋Š” ํ•˜๋‚˜๋ผ ํ•„์š”์—†์Œ
const thisIsCode = document.getElementById('code');

thisIsPw.addEventListener('keydown', function(event) {
  thisIsCode.innerHTML = event.code; 
});
// ํ‚ค๋ณด๋“œ๋กœ ๋ญ”๊ฐ€ ๋ˆ„๋ฅด๋ฉด, thisIsCode ์—๋‹ค๊ฐ€ ๊ทธ ๋ญ”๊ฐ€ ๋ˆ„๋ฅธevent์˜ ์ด๋ฆ„์ •๋ณด ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด๋ผ.
//('Enter' ์ด๋Ÿฐ๊ฑฐ, e.code e.keyCode ๊ฐ™์€ ๊ฑฐ์ž„ ) 

.code ๋Š” ์ž…๋ ฅ๋œ ํ‚ค์˜ ์ด๋ฆ„ ์ •๋ณด. (IE์˜ ๊ฒฝ์šฐ .keyCode ๋ฅผ ์”€)

thisIsPw.addEventListener('keydown', function(e) {
if (e.code === 'Enter') {
   //๋กœ๊ทธ์ธ ํ•จ์ˆ˜๋กœ ์ด๋™
} 
});
//key down ์ผ์–ด๋‚ฌ์„๋•Œ, ๊ทธ ์ž…๋ ฅ๊ฐ’ e์˜ ์ฝ”๋“œ๊ฐ€ enter ๊ฐ€ ๋งž์œผ๋ฉด ๋กœ๊ทธ์ธ ํ•จ์ˆ˜๋กœ ์ด๋™ํ•ด๋ผ! 
//  (์—”ํ„ฐ์น˜๋ฉด ๋กœ๊ทธ์ธ๋˜๊ฒŒ ํ•˜๋Š” ํ•จ์ˆ˜)

ex)
input#re-password์— keyup ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.
์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰๋  ํ•จ์ˆ˜์— ์•„๋ž˜์˜ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”


const thisIsPw = document.getElementById('password');
const thisIsButton = document.getElementsByClassName('login-btn')[0];
const Repassword = document.getElementById('re-password');

Repassword.addEventListener('keyup', function(){

let PAlert = document.getElementsByClassName('.alert')[0];


if( thisIsPw.value === Repassword.value ){

PAlert.innerHTML = " ";
return;
}
PAlert.innerHTML = "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค";

});

getElement class์ผ๋•Œ๋Š” elements
id ์ผ๋•Œ๋Š” ๊ทธ๋ƒฅ element

0๊ฐœ์˜ ๋Œ“๊ธ€