์นํ์ด์ง์ HTML ์ ๊ณ์ธตํ ์์ผ์ ํธ๋ฆฌ๊ตฌ์กฐ๋ก ๋ง๋ ๊ฐ์ฒด(Object).
Javascript๋ ์ด model๋ก ์น ํ์ด์ง์ ์ ๊ทผํ๊ณ ํ์ด์ง๋ฅผ ์์ ํ ์ ์๋ค.
HTML์ธ ์น ํ์ด์ง์ ์คํฌ๋ฆฝํ ์ธ์ด(Javascript)๋ฅผ ์๋ก ์๋ ์ญํ ์ ํ๋ค.
์ด๋ฐ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์๊ฒผ๋ค.
๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํํํ๋๋ฐ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๊ฐ๋ ์ด object(๊ฐ์ฒด) ๋ผ์ ์ด๋ฐ ํํ๋ก ๋์ด ์์.
์ ๊ทผํ๋ ๋ฐฉ๋ฒ ๋ํ ๊ฐ์ฒด๋ ๊ฐ๋ค. (key. value)
Dot Notation์ ์ฃผ๋ก ์ด๋ค. ์งง์์.
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๋ก ์์ ๋ค์ ๋ถ์ฌ์ค๋ค.*/
interaction
์ฌ์ฉ์์ ์ํธ์์ฉ
๋ฑ ๋ค์ํ๋ค. ๋ค ์ ํ์ ์ ํ ์๋ค. ํ์ํ๋ค ์ถ์ผ๋ฉด ๊ตฌ๊ธ๋งํ ๋
mdn event ์ด๋ฐ์์ผ๋ก ์ณ๋ ๋์ด ๊ฑฐ์ ์ฐ๋ ๊ฒ๋ง ์ด๋ค.
์ด๋ฒคํธ๋ฅผ ๋ฃ๊ณ ์๋ ์ฌ๋
ํน์ ์์์ 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 ์ฌ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋๋์ง ํ๋ฒ ๋ณผ ํ์๊ฐ ์์ )
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