indexOf()๋ฅผ ํตํด ๊ฒ์ ์ฌ์ดํธ ์ ์ํ๊ธฐ
์ง๋ ์๊ฐ์๋ indexOf()์ ๋ํด ์์๋ณด์์ต๋๋ค. ์ด๋ฒ ์๊ฐ์๋ ์ฌํ๊ณผ์ ์ผ๋ก ๋ฌธ์์ด ๋ฉ์๋ ์ค ํ๋์ธ indexOf() ๋ฉ์๋๋ฅผ ํตํด ๊ฒ์ ์ฌ์ดํธ๋ฅผ ์ ์ํด๋ณผ๊น์?!
๋จผ์ indexOf() ๋ฉ์๋์ ๋ํด ์งง๊ฒ ์์๋ณด๊ณ ์ฌ์ดํธ ์ค์ต์ ๋ค์ด๊ฐ๋ณด๊ฒ ์ต๋๋ค!
#1. indexOf()
indexOf() ๋ฉ์๋๋ ๋ฌธ์์ด์์ ํน์ ๋ฌธ์์ ์์น(index)๋ฅผ ์ฐพ์ ํ ์ซ์๋ก ๋ฐํํฉ๋๋ค.
โ๏ธ์ฝ๋ ๋ณด๊ธฐ
const str1 = "javascript reference"
const currentStr1 = str1.indexOf("javascript"); // 0
const currentStr2 = str1.indexOf("reference"); // 11 (11๋ฒ์งธ ์๋ฆฌ : ์์น ๊ฐ ์ถ๋ ฅ)
const currentStr3 = str1.indexOf("j"); // 0
const currentStr4 = str1.indexOf("a"); // 1 (์ค๋ณต์ผ ๋ ๊ฐ์ฅ ์ฒ์ ๊ฒ๋ง ์ถ๋ ฅ)
const currentStr5 = str1.indexOf("v"); // 2
const currentStr6 = str1.indexOf("jquery"); // -1
#2. HTML : ๊ตฌ์กฐ ์ง๊ธฐ
! point ! list ํ๊ทธ์ data-name ์์ฑ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ์ด๋ฆ์ ์ ํด๋ณด์!
โ๏ธ์ฝ๋ ๋ณด๊ธฐ
<div class="search__wrap">
<span>indexOf()๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์ํ๊ธฐ</span>
<h1>HTML ํ๊ทธ ๊ฒ์ํ๊ธฐ</h1>
<div class="search__box">
<label for="search">๊ฒ์ํ๊ธฐ</label>
<input type="text" id="search" placeholder="HTML ํ๊ทธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์!">
</div>
<div class="search__list">
<div class="html">
<ul>
<li data-name="accent-color"><strong>accent-color</strong> : accent-color๋ ์์์ ๊ฐ์กฐ ์์์ ์ง์ ํฉ๋๋ค.</li>
<li data-name="align-content"><strong>align-content</strong> : align-content๋ ์ฝํ
์ธ ์ฌ์ด์ ์ฝํ
์ธ ์ฃผ์ ๋น ๊ณต๊ฐ์ ํ๋ ์ค ๋ฐ์ค'์ ๊ต์ฐจ์ถ ๋๋ ๊ทธ๋ฆฌ๋์ ๋ธ๋ก ์ถ์ ๋ฐ๋ผ ๋ฐฐ์นํ๋ ๋ฐฉ์์ ๊ฒฐ์ ํฉ๋๋ค.</li>
<li data-name="align-items"><strong>align-items</strong> : align-item์ ์ฝํ
์ธ ์์ดํ
์ ๋ด๋ถ ์ํ๊ด๊ณ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li data-name="align-self"><strong>align-self</strong> : align-self๋ ๊ฐ๋ณ์ ์ฝํ
์ธ ์์ดํ
์ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li data-name="allr"><strong>all</strong> : all์ ์์์ ๋ชจ๋ ์์ฑ์ ์ด๊ธฐํํฉ๋๋ค. ๋๋ ์์์ ์ค์ ํฉ๋๋ค.</li>
<li data-name="animation"><strong>animation</strong> : animation์ ์ ๋๋ฉ์ด์
๊ณผ ๊ด๋ จ๋ ์์ฑ์ ์ผ๊ด์ ์ผ๋ก ์ค์ ํฉ๋๋ค.</li>
<li data-name="animation-delay"><strong>animation-delay</strong> : animation-delay๋ ์ ๋๋ฉ์ด์
์ง์ฐ ์๊ฐ์ ์ค์ ํฉ๋๋ค.</li>
<li data-name="animation-direction"><strong>animation-direction</strong> : animation-direction๋ ์ ๋๋ฉ์ด์
์์ง์ ๋ฐฉํฅ์ ์ค์ ํฉ๋๋ค.</li>
<li data-name="animation-duration"><strong>animation-duration</strong> : animation-duration๋ ์ ๋๋ฉ์ด์
์์ง์ ์๊ฐ์ ์ค์ ํฉ๋๋ค.</li>
<li data-name="animation-fill-mode"><strong>animation-fill-mode</strong> : animation-fill-mode๋ ์ ๋๋ฉ์ด์
์ด ๋๋ ํ์ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li data-name="animation-iteration-count"><strong>animation-iteration-count</strong> : animation-iteration-count๋ ์ ๋๋ฉ์ด์
์ ๋ฐ๋ณต ํ์๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li data-name="animation-name"><strong>animation-name</strong> : animation-name์ ์ ๋๋ฉ์ด์
Keyframe ์ด๋ฆ์ ์ค์ ํฉ๋๋ค.</li>
<li data-name="animation-play-state"><strong>animation-play-state</strong> : animation-play-state๋ ์ ๋๋ฉ์ด์
์ ์งํ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li data-name="animation-timeline"><strong>animation-timeline</strong> : animation-timeline์ ์์์ ์ ์ฉํ ์คํฌ๋กค ์ ๋๋ฉ์ด์
์ ์ค๋ช
ํ๋ ํ๋ ์ด์์ @scroll-timeline at-rules ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.</li>
<li data-name="animation-timing-function"><strong>animation-timing-function</strong> : animation-timing-function์ ์ ๋๋ฉ์ด์
์์ง์์ ์๋๋ฅผ ์ค์ ํฉ๋๋ค.</li>
<li data-name="appearance"><strong>appearance</strong> : appearance๋ webit ๊ณ์ด์ ๋ธ๋ผ์ฐ์ ์ type="search" ํ๋์ ๋ฅ๊ทผ ํ
๋๋ฆฌ ๊ฐ์ด๋ reset ํจ๊ณผ๋ฅผ ๋ํ๋ด๋ ๋ฒํผ์ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.</li>
<li data-name="aspect-ratio"><strong>aspect-ratio</strong> : aspect-ratio๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋น์จ๋๋ก ์กฐ์ ํ ์ ์๊ฒ ํฉ๋๋ค.</li>
</ul>
</div>
</div>
</div>
#3. CSS : ์คํ์ผ์ฃผ๊ธฐ
๋งํฌ์
์ ํ ๋๋ก ์คํ์ผ ์์ฑ์ ์ค์ ํด๋ณด์!
- ์คํ์ผ ์์ฑ์ ์ ํด์ง ๊ฒ์ด ์๋๋ ์ค์ตํ์ค ๋ถ๋ค์ ์ง์ ์์ฑ์ ์์๋ณด๊ณ ์คํ์ผ์ ์ค์ ํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค!
โ๏ธ์์ฑ ๋ณด๊ธฐ
/* font color */
:root {
--htmlColor : #223547;
--cssColor : #472237;
--javascriptColor : #624313;
}
/* reset */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'NexonLv1Gothic';
color: var(--htmlColor);
}
*, *:before, *:after {
box-sizing:border-box;
}
a {
color: var(--htmlColor);
text-decoration: none;
}
li {
list-style: none;
}
/* header */
#header nav {
margin: 10px;
}
#header nav li {
display: inline;
position: relative;
}
#header nav li a {
width: 30px;
height: 30px;
border: 1px solid var(--htmlColor);
border-radius: 50%;
display: inline-block;
text-align: center;
line-height: 30px;
font-family: 'NexonLv1Gothic';
}
#header nav li.active a {
background-color: var(--htmlColor);
color: #fff;
}
#header nav li .sub {
position: absolute;
left: 0;
top: 35px;
width: 400px;
}
#header nav li .sub li a {
width: auto;
background-color: transparent;
color: var(--htmlColor);
border: 0;
text-align: left;
line-height: 1.2;
}
#header nav li .sub li.active a {
text-decoration: underline;
}
/* main */
#main {
margin: 50px 10px;
}
.search__wrap {
max-width: 1400px;
margin: 0 auto;
border: 3px solid var(--htmlColor);
border-radius: 20px;
background-color: #F1F3F6;
padding: 30px;
text-align: center;
}
.search__wrap > span {
font-size: 20px;
margin-bottom: 20px;
display: inline-block;
}
.search__wrap > h1 {
font-family: 'Tmon';
color: var(--htmlColor);
font-size: 6vw;
margin-bottom: 10px;
}
.search__box {
margin-bottom: 40px;
}
/* irํจ๊ณผ */
.search__box label {
position: absolute;
clip: rect(0 0 0 0);
width: 1px;
height: 1px;
margin: -1px;
overflow: hidden;
}
.search__box input {
border: 2px solid var(--htmlColor);
padding: 15px 40px;
width: 70%;
border-radius: 50px;
font-size: 20px;
}
.search__list li {
text-align: left;
line-height: 1.7;
}
.search__list li.hide {
display: none;
}
/* ๋ชจ๋ฐ์ผ */
@media (max-width: 600px){
.search__wrap {
padding: 20px;
}
.search__wrap > span {
font-size: 16px;
margin-bottom: 10px;
}
.search__wrap > h1 {
font-size: 44px;
}
.search__box input {
font-size: 16px;
padding: 12px 30px;
}
}
/* footer */
#footer {
text-align: center;
}
#footer a {
color: #000;
font-family: 'NexonLv1Gothic';
padding-bottom: 50px;
}
#footer a:hover {
text-decoration: underline;
}
#4. JAVASCRIPT : ์คํฌ๋ฆฝํธ ์ง๊ธฐ
indexOf()์ ์กฐ๊ฑด๋ฌธ์ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด๋ณด์!
์ฝ๋์ ์ฃผ์๊ณผ ํจ๊ป ์คํฌ๋ฆฝํธ๋ฅผ ์ดํดํด๋ณด๋๋ก ํฉ๋๋ค:)
โ๏ธ์คํฌ๋ฆฝํธ ๋ณด๊ธฐ
//์ ํ์
const searchBox = document.querySelector(".search__box input"); //๊ฒ์ ์์ญ
const searchList = document.querySelectorAll(".search__list ul li"); //๋ชฉ๋ก ๋ฆฌ์คํธ
const searchInfo = document.querySelector(".search__info .num"); //๊ฐฏ์
//์ ์ฒด ๊ฐฏ์ ๊ตฌํ๊ธฐ
searchInfo.textContent = searchList.length;
//๊ฒ์ ์์ญ
searchBox.addEventListener("keyup", () => {
const searcWord = searchBox.value; //์ฌ์ฉ์๊ฐ ์
๋ ฅํ ํค์๋
searchList.forEach(el => {
const cssName = el.dataset.name;
//0์ด ๋์์ ๋ false๊ฐ ๋ ๊ฐ์ ๋ณด์ด๊ฒ ํ๋ค. keyup์ ํ๊ธฐ ๋๋ฌธ์ ํ ๊ธ์๋ง ์์ฑํด๋ ์คํ.
if(cssName.indexOf(searcWord)){
el.classList.add("hide"); //๊ฒ์ํ ๋จ์ด ์ธ์ ๋จ์ด ์จ๊น
} else {
el.classList.remove("hide"); //๊ฒ์ํ ๋จ์ด๋ฅผ ๋ณด์ด๊ฒ ํจ : indexOf()๊ฐ์ด 0(=false)์ด ๋๋ ๊ฐ๋ง hide๋ฅผ ์ง์์ค๋ค.
}
});
});
! point ! indexOf()๊ฐ์ด 0(=false)์ด ๋๋ ๊ฒ๋ง hide๋ฅผ ์ง์์ค๋ค.
#4. ๊ฒฐ๊ณผ
'EFFECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ03 (4) | 2022.08.23 |
---|---|
[Search] ๊ฒ์ ์ ํ ์ฌ์ดํธ ๋ง๋ค๊ธฐ02 (4) | 2022.08.17 |
ํด์ฆ ๋ฌธ์ ๋ง๋ค๊ธฐ04 (6) | 2022.08.08 |
ํด์ฆ ๋ฌธ์ ๋ง๋ค๊ธฐ03 (4) | 2022.08.06 |
ํด์ฆ ๋ฌธ์ ๋ง๋ค๊ธฐ02 (3) | 2022.08.05 |
๋๊ธ