[TIL] Day16
[SEB FE] Day16
script.js
<script>
์์๋ ๋ฑ์ฅ๊ณผ ํจ๊ป ์คํ๋จ// HTML์ JS ์ ์ฉ
<script src="myScriptFile.js"></script>
<script>
์์ ์ถ๊ฐ ๋ฐฉ๋ฒ<head>
์์ชฝ์ ์ฝ์
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Document</title>
<!-- script ์์ ์ฝ์
์์น -->
<script src="myScriptFile.js"></script>
</head>
<body>
<div id="msg">Hello JavaScript!</div>
</body>
</html>
console.log("welcome JavaScript");
let msgElement = document.querySelector("#msg");
console.log(msgElement);
// welcome JavaScript
// null <- js ์ฝ๋ ๋จผ์ ์ฝ์ด์ html์ด ์์ ํ ๋ก๋ฉ๋๊ธฐ ์ ์ js ํ์ผ์ด ์คํ๋์๊ธฐ ๋๋ฌธ
<body>
์์๊ฐ ๋๋๊ธฐ ์ ์ ์ฝ์
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<div id="msg">Hello JavaScript!</div>
<!-- script ์์ ์ฝ์
์์น -->
<script src="myScriptFile.js"></script>
</body>
</html>
console.log("welcome JavaScript");
let msgElement = document.querySelector("#msg");
console.log(msgElement);
// welcome JavaScript
// <div id="msg">Hello JavaScript!</div>
console.dir
์ด ์ ์ฉconsole.dir
์ console.log
์ ๋ฌ๋ฆฌ DOM์ ๊ฐ์ฒด์ ๋ชจ์ต์ผ๋ก ์ถ๋ ฅ
// body์ ์์ ์์ ์ฐพ๊ธฐ
console.dir(document.body.children)
// ๋ฐ๋ก ๋ณ์ ์ ์ธ์ ํด์ ์ ๋ณด๋ฅผ ์ ์ฅํด๋๋ฉด, ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ์ธ์ ๋ ์ง ์ ๊ทผ ๊ฐ๋ฅ
let newsContents = document.body.children[1]
console.dir(newsContents)
// ๋ถ๋ชจ ์์ ์ฐพ๊ธฐ
console.dir(newsContents.parentElement)
โ๐ป CRUD(Create, Read, Update and Delete)
: HTML Element ์ถ๊ฐ
document.createElement('div')
// <div></div>
// ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ด๋ค ์์
์ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ํ ๋น
const tweetDiv = document.createElement('div')
: ์์ฑํ HTML Element๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์ฐ๊ฒฐ (๋ถ๋ชจ ๋ ธ๋์ ํฌํจ)
document.body.append(tweetDiv)
: HTML Element ์กฐํ
querySelector
(์
๋ ํฐ ์กฐํ)์ฒซ๋ฒ์งธ ์ธ์๋ก Selector
๋ฅผ ์ ๋ฌํ์ฌ ํ์ธโdivโ
), id(โ#tweetListโ
), class(.tweet
): ์์ ์กฐํ
// ํด๋์ค ์ด๋ฆ์ด tweet์ธ HTML ์๋ฆฌ๋จผํธ ์ค ์ฒซ ๋ฒ์งธ ์๋ฆฌ๋จผํธ ์กฐํ
const oneTweet = document.querySelector('.tweet')
// ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ํ ๋ฒ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด์ , querySelectorAll ์ฌ์ฉ
const tweets = document.querySelectorAll('.tweet')
// querySelector์ ๋น์ทํ ์ญํ ์ ํ๋ ์ค๋๋ ๋ฐฉ์
const getOneTweet = document.getElementById('container')
โย ์์ ์กฐํํ HTML ์์๋ค์ ๋ฐฐ์ด โย
โ ์ด๋ฌํ ๋ฐฐ์ด ์๋ ๋ฐฐ์ด์ ์ ์ฌ ๋ฐฐ์ด, ๋ฐฐ์ดํ ๊ฐ์ฒด ๋ฑ์ผ๋ก ๋ถ๋ฆ โ Array-like Object
: HTML Element ๋ณ๊ฒฝ
textContent
: ๋น์ด์๋ div ์๋ฆฌ๋จผํธ์ ๋ฌธ์์ด ์
๋ ฅclassList.add
: ํด๋์ค ์ถ๊ฐconst oneDiv = document.createElement('div');
console.log(oneDiv) // <div></div>
// ๋ฌธ์์ด ์
๋ ฅ
oneDiv.textContent = 'dev';
console.log(oneDiv) // <div>dev</div>
// ํด๋์ค ์ถ๊ฐ
oneDiv.classList.add('tweet');
console.log(oneDiv) // <div class="tweet">dev</div>
// container์ ์์ ์์๋ก ์ถ๊ฐ
const container = document.querySelector('#container');
container.append(oneDiv)
: HTML Element ์ญ์
// ์ญ์ ํ๋ ค๋ ์์์ ์์น๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ (remove)
const container = document.querySelector('#container');
const tweetDiv = document.createElement('div');
container.append(tweetDiv)
tweetDiv.remove()
----------
// ์ฌ๋ฌ๊ฐ์ ์์ ์์๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ (innerHTML; ๋ณด์์ ๋ฌธ์ ์กด์ฌ)
document.querySelector('#container').innerHTML = '';
----------
// innerHTML์ ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ๋์ ์ธ ์ ์๋ removeChild
// removeChild: ์์ ์์๋ฅผ ์ง์ ํด์ ์ญ์ ํ๋ ๋ฉ์๋
const container = document.querySelector('#container');
// ์์ ์์๊ฐ ๋จ์์์ง ์์ ๋๊น์ง, ์ฒซ๋ฒ์งธ ์์ ์์ ์ญ์
while (container.firstChild) {
container.removeChild(container.firstChild);
}
-----
// ์ ๋ชฉ์ ํด๋นํ๋ ๋ถ๋ถ๊น์ง ์ญ์ ๋๋ ๊ฒ์ ๋ฐฉ์ง
while (container.children.length > 1) {
container.removeChild(container.lastChild);
}
-----
// ์ง์ ํด๋์ค ์ด๋ฆ์ด tweet์ธ ์์๋ง ์ฐพ์์ ์ญ์
tweets.forEach(function(tweet){
tweet.remove();
})
// or
for (let tweet of tweets) {
tweet.remove()
}
: ์์์ ํ์๊ฐ์ ์ฐฝ์ id, password ์ ํจ์ฑ ๊ฒ์ฌ ์๋ฃํ๊ธฐ
โ๐ป ์๋์ ๊ฐ์ด ์์ด๋๋ 4๊ธ์ ์ด์์ด์ฌ์ผ ํ๋ฉฐ, ๋น๋ฐ๋ฒํธ๋ ๋น๋ฐ๋ฒํธ ํ์ธ๊ณผ ์ผ์นํด์ผ ์๋ด ๋ฌธ๊ตฌ๊ฐ ์ฌ๋ผ์ง๋ค.
<!-- index.html -->
<!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>์ ํจ์ฑ ๊ฒ์ฌ</title>
<link rel="stylesheet" href="style.css">
<script src="validator.js"></script>
</head>
<body>
<h1>ํ์๊ฐ์
</h1>
<fieldset>
<label>์์ด๋</label>
<input type="text" id="username">
<div class="success-message hide">์ฌ์ฉํ ์ ์๋ ์์ด๋์
๋๋ค</div>
<div class="failure-message hide">์์ด๋๋ ๋ค ๊ธ์ ์ด์์ด์ด์ผ ํฉ๋๋ค</div>
</fieldset>
<fieldset>
<label>๋น๋ฐ๋ฒํธ</label>
<input type="password" id="password">
</fieldset>
<fieldset>
<label>๋น๋ฐ๋ฒํธ ํ์ธ</label>
<input type="password" id="password-retype">
<div class="mismatch-message hide">๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ต๋๋ค</div>
</fieldset>
<fieldset>
<button>ํ์๊ฐ์
</button>
</fieldset>
<script src="script.js"></script>
</body>
</html>
// script.js
let elInputUsername = document.querySelector("#username");
let elFailureMessage = document.querySelector(".failure-message");
let elSuccessMessage = document.querySelector(".success-message");
let elPassword = document.querySelector("#password");
let elRePassword = document.querySelector("#password-retype");
let elPasswordMessage = document.querySelector(".mismatch-message");
// ์์ด๋ ์
๋ ฅ๋์ ํค๋ณด๋๊ฐ ๋๋ ธ์ ๋ ์คํ
elInputUsername.onkeyup = function () {
console.log(elInputUsername.value);
// isMoreThan4Length ํจ์๊ฐ true์ผ ๋
if (isMoreThan4Length(elInputUsername.value)) {
// ์ฑ๊ณต ๋ฉ์์ง๊ฐ ๋ณด์ฌ์ผ ํจ
elSuccessMessage.classList.remove("hide");
// ์คํจ ๋ฉ์์ง๊ฐ ๊ฐ๋ ค์ ธ์ผ ํจ
elFailureMessage.classList.add("hide");
} else {
// isMoreThan4Length ํจ์๊ฐ false์ผ ๋
// ์ฑ๊ณต ๋ฉ์์ง๊ฐ ๊ฐ๋ ค์ ธ์ผ ํจ
elSuccessMessage.classList.add("hide");
// ์คํจ ๋ฉ์์ง๊ฐ ๋ณด์ฌ์ผ ํจ
elFailureMessage.classList.remove("hide");
}
};
// ๋น๋ฐ๋ฒํธ ํ์ธ ์
๋ ฅ๋์ ํค๋ณด๋๊ฐ ๋๋ ธ์ ๋ ์คํ
elRePassword.onkeyup = function () {
// isMatch ํจ์๊ฐ true์ผ ๋
if (isMatch(elPassword.value, elRePassword.value)) {
// ์คํจ ๋ฉ์์ง๊ฐ ๊ฐ๋ ค์ ธ์ผ ํจ
elPasswordMessage.classList.add("hide");
} else {
// isMatch ํจ์๊ฐ false์ผ๋
// ์คํจ ๋ฉ์์ง๊ฐ ๋ณด์ฌ์ผ ํจ
elPasswordMessage.classList.remove("hide");
}
};
// 1. ์์ด๋ ์ ํจ์ฑ ๊ฒ์ฌ: ์์ด๋๊ฐ 4๊ธ์ ์ด์์ด์ฌ์ผ ํจ
function isMoreThan4Length(value) {
return value.length >= 4;
}
// 2. ๋น๋ฐ๋ฒํธ ์ ํจ์ฑ ๊ฒ์ฌ: ์ฒ์ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ ๋ด์ฉ๊ณผ ๋น๋ฐ๋ฒํธ ํ์ธ๋์ ๋ด์ฉ์ด ๊ฐ์์ผ ํจ
function isMatch(password1, password2) {
if (password1 === password2) {
return true;
} else {
return false;
}
}
/* style.css */
body {
background-color: lightgoldenrodyellow;
}
.hide {
display: none;
}