๐จโ๐ป ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์๋ ์์ฑ ์ ๋ ฅ ์์ ๋ง๋ค๊ธฐ ๐ฅ๐ฅ
13131 ๋จ์ด tutorialwebdevbeginnersjavascript
๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์์๋ ์๋์์ฑ ๊ธฐ๋ฅ์ผ๋ก ๊ฐ๋จํ ๊ฒ์์ ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋ํ ๋ฐฑ์๋๋ฅผ ๋ค๋ฃจ์ง ์์ ๊ฒ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ํด ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค...
์๋๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค๋ ค๋ ๊ฒ์ ์์ ๋๋ค.
๋จผ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ ์ฑ์ HTML์ ์ ๋ ฅํฉ๋๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="index.css"/>
</head>
<body>
<div class="container">
<div class="search-container">
<input type="text" onkeyup="filterNames(event)">
</div>
<ul class="list-container" id ="list-container">
<li>Kushal Sharma</li>
</ul>
</div>
</body>
<script src="index.js"></script>
</html>
์ด์ ์ฝ๊ฐ์ CSS๋ก ์ฑ์ ์คํ์ผ์ ์ง์ ํด ๋ณด๊ฒ ์ต๋๋ค.
*{
box-sizing: border-box;
margin: 0px;
padding: 0px;
}
.container{
margin-top: 25px;
margin-left:auto;
margin-right: auto;
min-height: 500px;
width: 80%;
border: 1px solid black;
}
.search-container{
width: 100%;
}
.search-container input{
width: 100%;
height: 40px;
font-size: 25px;
}
.list-container li{
list-style: none;
border: 1px solid red;
padding: 15px 15px;
font-size: 25px;
}
์ด์ ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ์์ฃผ ์ ์ ์์ ์คํ์ผ ์ง์ ์ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฐ ์ ํฉํฉ๋๋ค. ์ด์ ์๋ ์์ฑ ํ๋ก์ธ์ค์ ๋๋ค. ์ ๋ ฅํ ๋ฌธ์์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ํํฐ๋งํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด JSON์ ์ฌ์ฉํ์ฌ ํด๋น ๋ ์ฝ๋๋ฅผ ๋ฐฐ์ด์ ์ ์ฅํ ๊ฒ์ ๋๋ค.
๋ค์์ผ๋ก index.js๋ก ์ ์ฅ๋ ์ ํ์ผ์ ๋ง๋ค๊ณ ๋ค์ ์ฝ๋๋ฅผ ์ ๋ ฅํด ๋ณด๊ฒ ์ต๋๋ค.
const names = [
{
name:"kushal sharma",
},
{
name:"Jeremy",
},
{
name:"john",
},
{
name:"sandeep",
},
{
name:"mohit",
},
{
name:"sanjeev",
},
{
name:"maininder",
},
{
name:"Ajay",
}
]
(' name = [โkushalโ,โjeremyโ,โjohnโ,โsachinโ] '๊ณผ ๊ฐ์ ๊ฐ๋จํ ๋ฐฐ์ด ๋ฆฌํฐ๋ด๋ ์๋ํ ์ ์์ง๋ง ์ ๋ JSON์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค).
index.html ํ์ผ์ ์ด ๋ ์ด๋ฆ์ ํ์ํ์ฌ ์ด๋ฆ์ ํํฐ๋งํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๊ฐ ์ด๋ฆ์ HTML DOM ์์๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค. ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ DOM ์์๋ก ๋ณํํ๊ณ ๋ค์๊ณผ ๊ฐ์ด UI์ ํ์ํฉ๋๋ค.
function renderNames(arrayOfNames) {
let liElemet = "" ;
for (let i= 0; i <arrayOfNames.length; i++) {
liElemet += `<li>${arrayOfNames[i].name}</li>`
}
document.getElementById("list-container").innerHTML= liElemet;
}
๊ทธ๋์ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ด์ ์ ์์ฑํ ์ด๋ฆ์ ๋ฐฐ์ด๋ก ๊ตฌ์ฑ๋ arrayOfNames ์ธ์๋ฅผ ๋ฐ์๋ค์ด๋ renderNames ํจ์๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ด ์ฝ๋ ์ค์์ ๋ชฉ๋ก์ ๋ง๋ค๊ณ ์์ต๋๋ค.
liElemet += `<li>${arrayOfNames[i].name}</li>`
์ผ๋จ ์ฐ๋ฆฌ๋ ๋ชจ๋
์ด์ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฆ ๋ฐฐ์ด์ ์ ๋ฌํ์ฌ ์ด ํจ์๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.
renderNames(names);
์ด์ ๋ชจ๋ ์ด๋ฆ ๋ชฉ๋ก์ ๋ณผ ์ ์์ต๋๋ค.
๋ค์์ผ๋ก ์ฃผ์ ๊ธฐ๋ฅ์ ๋ํด ์์ ํฉ๋๋ค. ๋จผ์ ์ ๋ ฅํ๋ ๋ด์ฉ์ ํ์ ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด JavaScript ์ฝ๋์ ํจ๊ป HTML ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ฐฝ์์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋๋ง๋ค ์ด๋ฒคํธ์ ๋๋ค. ํค๋ฅผ ๋๋ฅด๋ฉด ์ด๋ฒคํธ์ ๋๋ค. ๋ง์ฐ์ค๋ฅผ ์ด๋ํ๊ณ ์ฐฝ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๊ฒ๋ ์ด๋ฒคํธ์ ๋๋ค. ๋ฐ๋ผ์ ๊ฒ์์ ์ํํ๋ ์ค์ด๋ฏ๋ก ํค๋ณด๋ ํค ๋๋ฅด๊ธฐ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
<input type="text" onkeyup="filterNames(event)">
์ฌ๊ธฐ์ onkeyup ์์ฑ์ ์ถ๊ฐํ์ผ๋ฉฐ filterNames() ํจ์๋ฅผ ํธ์ถํ๊ณ ์ด๋ฒคํธ๋ฅผ ์ธ์๋ก ์ ๋ฌํฉ๋๋ค. ์ด๋ฒคํธ ์ธ์์๋ ์ด๋ฒคํธ์ ๋ํ ๋ชจ๋ ์ ๋ณด, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์น, ๋์ ์์, ๊ฐ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
์ด์ filterNames() ํจ์๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
function filterNames(event) {
var searchvalue = event.target.value;
var filterNames = names.filter((v,i)=>{
return(v.name.includes(searchvalue));
})
renderNames(filterNames);
}
filterNames() ํจ์ ๋ด์์ "event.target.value "๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ํค๊ฐ ๋๋ ธ๋์ง ํ์ ํ ๋ค์ ๋ฐฐ์ด์ ์ด๋ฆ์ ํตํด ํํฐ๋งํ๊ณ ์ ๋ ฅ๋ ๋ฌธ์๋ฅผ ํฌํจํ๋ ์ด๋ฆ๋ง ๋ฐํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ filter() ๋ฉ์๋์์ ๋ฐํ๋ ์ ์ด๋ฆ ๋ฐฐ์ด๋ก renderNames() ํจ์๋ฅผ ๋ค์ ํธ์ถํฉ๋๋ค.
์ด์ ๊ฒ์ ์์ ์์ "sa"๋ผ๋ ๋ฌธ์๋ฅผ ์ ๋ ฅํ์ ๋ "sandeep"๊ณผ "sanjeev"๋ผ๋ ๋ ๊ฐ์ ์ด๋ฆ์ด ๋ฐํ๋์์ผ๋ฉฐ ๋ ๋ค "sa"๋ผ๋ ๋ฌธ์๋ฅผ ํฌํจํ๊ณ ์์์ ์ ์ ์์ต๋๋ค.
๋ง์ธ! ์์ JavaScript๋ก ์๋ ์์ฑ ๊ธฐ๋ฅ์ผ๋ก ๊ฒ์์ ๋ง๋ค์์ต๋๋ค!
๋๋ ๋น์ ์ด ์ด๊ฒ์ ์ข์ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ง๋ฌธ์ด ์์ผ๋ฉด ์๊ฒฌ์ ์ ์ด์ฃผ์ญ์์ค. twitter์์ ๋๋ฅผ ํ๋ก์ฐ โ ๋ด๊ฐ ๋งค์ผ ์์ ํ๊ณ ์๋ ๊ฒ์ ํ์ธํ์ธ์.
๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์ ๋ธ๋ก๊ทธ๋ฅผ ๊ฒ์ํ ๋ ์๋ฆผ์ ๋ฐ์ผ๋ ค๋ฉด Dev์์ ๋๋ฅผ ํ๋ก์ฐํ ์๋ ์์ต๋๋ค.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐จโ๐ป ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์๋ ์์ฑ ์ ๋ ฅ ์์ ๋ง๋ค๊ธฐ ๐ฅ๐ฅ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/sharmakushal/make-autocomplete-input-box-in-pure-javascript-3p3hํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค