<script>
fetch('https://api.themoviedb.org/3/movie/top_rated?language=en-US&page=1', options)
.then(response => response.json())
.then((data) => {
data.results.forEach(element => {
document.querySelector('.row').innerHTML += `
<div class="movie-card" id="${element.id}"token interpolation">${element.id}')">
<div class="card">
<img src=${`https://image.tmdb.org/t/p/w400` + element.backdrop_path} class="card-img-top" art="...">
<div class="card-body">
<h4 class="card-title" id="card-title">${element.original_title}</h4>
<p class="card-text">${element.overview}</p>
<p class="card-text"><small class="text-body-secondary">${`Rating : ` + element.vote_average}</small></p>
</div>
</div>
</div>
`;
})
})
.catch(err => console.error(err));
document.addEventListener('DOMContentLoaded', () => {
const payrollSearch = document.querySelector('#search-box');
function search() {
// 카드 제목 element를 id 값(card-title)으로 가져오기
const payrollTitle = document.querySelectorAll('.card-title');
// 사용자가 입력한 검색어의 value값을 가져와 소문자로 변경하여 filterValue에 저장
const filterValue = payrollSearch.value.toLowerCase();
// payrollTitle 안에 있는 문자열을 for문으로 순회
for (let i = 0; i < payrollTitle.length; i++) {
// 현재 순회중인 payrollTitle의 textContent를 소문자로 변경하여 rows에 저장
let rows = payrollTitle[i].textContent.toLowerCase();
if(i === 0) {
}
const id = payrollTitle[i].parentElement.parentElement.parentElement.id;
// rows가 filterValue를 포함하면 해당 title은 보여지게 하고, 그렇지 않으면 숨김
if (rows.includes(filterValue)) {
document.getElementById(id).style.display = '';
} else {
document.getElementById(id).style.display = 'none';
}
}
}
document.querySelector('#SearchBtn').addEventListener('click',search);
// 검색어 입력 시 바로 필터링을 원할 때 클릭 이벤트 대신 keyup 사용 가능
// payrollSearch.addEventListener('keyup', search);
})
</script>
document.addEventListener('DOMContentLoaded', () => {
const payrollSearch = document.querySelector('#search-box');
function search() {
// 카드 제목 element를 id 값(card-title)으로 가져오기
const payrollTitle = document.querySelectorAll('.card-title');
// 사용자가 입력한 검색어의 value값을 가져와 소문자로 변경하여 filterValue에 저장
const filterValue = payrollSearch.value.toLowerCase();
Array.from(payrollTitle).forEach((item, i) => {
// 현재 순회중인 payrollTitle(item)의 innerHTML를 소문자로 변경하여 rows에 저장
let rows = item.innerHTML.toLowerCase();
if(i === 0) {
}
const id = payrollTitle[i].parentElement.parentElement.parentElement.id;
// rows가 filterValue를 포함하면 해당 title은 보여지게 하고, 그렇지 않으면 숨김
if (rows.includes(filterValue)) {
document.getElementById(id).style.display = '';
} else {
document.getElementById(id).style.display = 'none';
}
})
}
const cardId = document.getElementById(id);
console.log(id);
if (rows.includes(filterValue)) {
cardId.style.display = "";
} else {
cardId.style.display = "none";
}
<h4 data-num="${element.id}" class="card-title" id="card-title">${element.original_title}</h4>
...
const id = item.dataset.num;
<script>
fetch('https://api.themoviedb.org/3/movie/top_rated?language=en-US&page=1', options)
.then(response => response.json())
.then((data) => {
data.results.forEach(element => {
document.querySelector('.row').innerHTML += `
<div class="movie-card" id="${element.id}"token interpolation">${element.id}')">
<div class="card">
<img src=${`https://image.tmdb.org/t/p/w400` + element.backdrop_path} class="card-img-top" art="...">
<div class="card-body">
<h4 data-num="${element.id}" class="card-title" id="card-title">${element.original_title}</h4>
<p class="card-text">${element.overview}</p>
<p class="card-text"><small class="text-body-secondary">${`Rating : ` + element.vote_average}</small></p>
</div>
</div>
</div>
`;
})
})
.catch(err => console.error(err));
document.addEventListener('DOMContentLoaded', () => {
const payrollSearch = document.querySelector('#search-box');
function search() {
const payrollTitle = document.querySelectorAll('.card-title');
const filterValue = payrollSearch.value.toLowerCase();
Array.from(payrollTitle).forEach((item, i) => {
let rows = item.innerHTML.toLowerCase();
if(i === 0) {
}
const id = item.dataset.num;
const cardId = document.getElementById(id);
console.log(id);
if (rows.includes(filterValue)) {
cardId.style.display = "";
} else {
cardId.style.display = "none";
}
}
}
document.querySelector('#SearchBtn').addEventListener('click',search);
})
</script>
코드를 처음 작성했을 때는 잘한 것 같았는데, 막상 피드백을 받고 보니 코드를 더 간단히 쓸 수 있었는데 놓친 부분이 많다는 생각이 들었다. 변수에 저장하는 방법도 강의할 때 많이 들었지만 막상 구현을 하니 잘 보이지 않아서 잘 짜여진 코드를 자주 보고 배워야할 필요성을 느꼈다.
그리고 마지막에 사용한 dataset은 부모태그 대신 어떻게 사용하면 좋을지 고민하다가 팀원의 도움으로 사용하게 되었는데, 사실 dataset의 내용이 잘 나오지 않아 지금의 내 수준에서는 이해를 하기가 조금 힘들었다. 현재 이런 것을 사용하여 해결하였다는 내용은 적어놓고 앞으로 더 공부를 해봐야겠다.
멋지십니다