type ahead
const endpoint = 'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json';
const cities = []; // ๋ฐ์ดํ๊ฐ์ ๋ฐ์
fetch(endpoint)
.then(blob => blob.json()) // ์ ์ด์จ
.then(data => cities.push(...data)); // ๋ฐ์ดํฐ
//json ๋ด์ฉ ๊ฐ์ ธ์ค๊ธฐ
// fetch -> ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ ์ด๋คํ์ผ์ ์๋ตํด๋ฌ๋ผ๊ณ ์์ฒญํ๊ฒ
function findMatches(wordToMatch, cities) {
return cities.filter(place => {
//๋์๋ ์ฃผ๊ฐ ๊ฒ์ํ ๊ฒ๊ณผ ์ผ์นํ๋์ง ํ์ธํ ์ผ์นํ๋ ๋จ์ด๋ง ์ ๋ฐฐ์ด ๋ง๋ค๊ธฐ
const regex = new RegExp(wordToMatch, 'gi');
return place.city.match(regex) || place.state.match(regex)
});
}
// ์ซ์์ ์ฒ ๋จ์ ์ฝค๋ง ํ์
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
// ์ผ์นํ๋ ๋จ์ด ๋ณด์ฌ์ฃผ๊ธฐ
function displayMatches() {
const matchArray = findMatches(this.value, cities);
const html = matchArray.map(place => {
const regex = new RegExp(this.value, 'gi');
const cityName = place.city.replace(regex, `<span class="hl">${this.value}</span>`);
const stateName = place.state.replace(regex, `<span class="hl">${this.value}</span>`);
return `
<li>
<span class="name">${cityName}, ${stateName}</span>
<span class="population">${numberWithCommas(place.population)}</span>
</li>
`;
}).join('');
suggestions.innerHTML = html;
}
// ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฌ๊ธฐ
const searchInput = document.querySelector('.search');
const suggestions = document.querySelector('.suggestions');
searchInput.addEventListener('change', displayMatches);
searchInput.addEventListener('keyup', displayMatches);
<form class="search-form">
<input type="text" class="search" placeholder="City or State">
<ul class="suggestions">
<li>Filter for a city</li>
<li>or a state</li>
</ul>
</form>
html {
box-sizing: border-box;
background: #ffc600;
font-family: 'helvetica neue';
font-size: 20px;
font-weight: 200;
}
*, *:before, *:after {
box-sizing: inherit;
}
input {
width: 100%;
padding: 20px;
}
.search-form {
max-width: 400px;
margin: 50px auto;
}
input.search {
margin: 0;
text-align: center;
outline: 0;
border: 10px solid #F7F7F7;
width: 120%;
left: -10%;
position: relative;
top: 10px;
z-index: 2;
border-radius: 5px;
font-size: 40px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.19);
}
.suggestions {
margin: 0;
padding: 0;
position: relative;
/*perspective: 20px;*/
}
.suggestions li {
background: white;
list-style: none;
border-bottom: 1px solid #D8D8D8;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.14);
margin: 0;
padding: 20px;
transition: background 0.2s;
display: flex;
justify-content: space-between;
text-transform: capitalize;
}
.suggestions li:nth-child(even) {
transform: perspective(100px) rotateX(3deg) translateY(2px) scale(1.001);
background: linear-gradient(to bottom, #ffffff 0%,#EFEFEF 100%);
}
.suggestions li:nth-child(odd) {
transform: perspective(100px) rotateX(-3deg) translateY(3px);
background: linear-gradient(to top, #ffffff 0%,#EFEFEF 100%);
}
span.population {
font-size: 15px;
}
.hl {
background: #ffc600;
}
fetch()
์๋ฒ์๊ฒ ์ด๋คํ์ผ์ ์๋ตํ๋ผ๊ณ ์์ฒญํ๋๊ฒ์ด๋ค.
๋น๋๊ธฐ๋ก ์ด๋ฃจ์ด์ง๊ธฐ๋๋ฌธ์ fetch ๋๋ ๋์ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์คํํ๋ค.
response ๊ฐ์ฒด ๊ฐ ๋ค์ด๊ฒ ๋๋๋ฐ ์ฌ๊ธฐ ์์๋ ์๋ฒ๊ฐ ์๋ตํ ๊ฒฐ๊ณผ๊ฐ์ด ์๋ค.
fetch(`member.json`).then(function (blob) {
blob.json()
.then(function (data) {
console.log(data);
console.log('hello');
});
})
[{
"name": "boa",
"age": "31"
},
{
"name": "mori",
"age": "26"
},
{
"name": "hoon",
"age": "39"
},
{
"name": "haha",
"age": "89"
},
{
"name": "hoho",
"age": "100"
},
{
"name": "bobo",
"age": "15"
},
{
"name": "baba",
"age": "2"
}
]
.push
const parts = ['knoo', 'shoo'];
let lyrics = ['head', ...parts, 'and', 'toes']; //["head", "shoulders", "knees", "and", "toes"]
const arr1 = [0, 1, 2];
const arr2 = [3, 4, 5];
arr1.push(...arr2); // 0 , 1, 2, 3, 4, 5
console.log(lyrics);
console.log(arr1);
findMatches()
function findMatches(wordToMatch, cities) {
return cities.filter(place => {
const regex = new RegExp(wordToMatch, "gi");
return place.city.match(regex) || place.state.match(regex);
// city์ state ๋๊ฐ ์ด๊ธฐ๋๋ฌธ์ || ์ฐ์ฐ์ ์ฌ์ฉ
});
}
findMatches() ์ธ์ 2๊ฐ๊ฐ ํ์ํจ ํ๋๋ ๊ฒ์ํ ๋จ์ด, ํ๋๋ ์ ์ฒด ๋ฐฐ์ด
๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ ๋งค๊ฐ๋ณ์๋ ๋ ๋น๊ธ์ผ๋ก ๊ฐ์ธ์ผ ํ๋ฉฐ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
์์ฑ์ ํจ์์ ๋งค๊ฐ๋ณ์๋ ๋น๊ธ์ผ๋ก ๊ฐ์ธ์ง ์์ผ๋ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฌ์ฉ์ ์
๋ ฅํ ๋จ์ด๋ก ๊ฒฐ๊ณผ๊ฐ ์ฐพ๊ธฐ
function displayMatches(){
console.log(this.value);
}
const searchInput = document.querySelector(".search");
const resultArea = document.querySelector(".result");
searchInput.addEventListener("change", displayMatches);
searchInput.addEventListener("keyup", displayMatches);
/*์ฌ์ฉ์๊ฐ input์ ์
๋ ฅํ๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ณ , findMatches() ๊ฒฐ๊ณผ๋ฅผ ๋ณด.
input๊ณผ ๊ฒฐ๊ณผ์ฐฝ์ ์
๋ ํ
ํ๊ณ , input์๊ฒ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๊ฑธ์ด์ค๋ค.*/
function displayMatches() {
const matchArray = findMatches(this.value, strArr); // this.value ์ ๋ฐฐ์ด์ด
console.log(matchArray);
}
Last updated
Was this helpful?