전개연산자1.js
const fruits = ['🥝','🍓','🍅','🍎'];
console.log(fruits);
console.log(...fruits);
toObject = (a, b, ...c) => {
return {
a:a, b:b, c:c,
}
}
toObject2 = (a, b, ...c) => {
return {
a, b, c,
}
}
toObject3 = (a, b, ...c) => ({a, b,c});
console.log(toObject(...fruits));
console.log(toObject2(...fruits));
console.log(toObject3(...fruits));
console.log(fruits[0], fruits[1], fruits[2]);
구조분해3.js
const user = {
name: '나신입',
age: 35,
email: 'nice@hot.com'
}
const user2 = {
address:'서울시 마포구 공덕동',
address2:'인천시'
}
console.log(user2);
const { address2 = '부산시' } = user2;
console.log(user2);
console.log(user2.address2);
console.log(address2);
const {name, age, email, address} = user;
console.log(name, age, email, address);
console.log(user.name);
console.log(user['name']);
console.log(`${user['name']}`);
클래스속성변경.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>클래스속성변경하기 - 실습</title>
<link rel="stylesheet" href="클래스속성변경.css">
<script src="클래스속성변경.js" defer></script>
</head>
<body>
<ul class="list">
<li><a href="#">메뉴1</a></li>
<li><a href="#">메뉴2</a></li>
<li><a href="#">메뉴3</a></li>
<li><a href="#">메뉴4</a></li>
<li><a href="#">메뉴5</a></li>
</ul>
</body>
</html>
클래스속성변경.css
* {
margin: 0px;
box-sizing: border-box;
}
li {
list-style: none;
}
a {
text-decoration: none;
}
body {
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
body .list {
display: flex;
}
body .list li {
width: 150px;
height: 50px;
border: 1px solid #aaaaaa;
}
body .list li a {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
font: bold 16px/1 "arial";
color: #777777
}
body .list li.on a {
background-color: #777777;
color: aqua;
}
클래스속성변경.js
const btns = document.querySelectorAll('.list li');
console.log(btns);
btns.forEach((btn,index) => {
btn.addEventListener('click', (e)=> {
for(let item of btns){
item.classList.remove('on');
}
btns[index].classList.add('on');
})
})
카카오도서api
deptList.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>실습 - Handlebars[템플릿엔진]</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
crossorigin="anonymous"
/>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4"
crossorigin="anonymous"
></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.js"></script>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
</head>
<body>
<script id="tb-dept" type="text/x-handlebars-template">
<table class='table'>
<!-- 헤더 영역 시작 -->
<thead>
<tr>
<th scope='col'>부서번호</th>
<th scope='col'>부서명</th>
<th scope='col'>지역</th>
</tr>
</thead>
<!-- 헤더 영역 끝 -->
<!-- 데이터셋 추가하는 화면 제공되는 영역 시작 -->
<tbody>
{{#depts}}
<tr>
<td>{{deptno}}</td>
<td>{{dname}}</td>
<td>{{loc}}</td>
</tr>
{{/depts}}
</tbody>
<!-- 데이터셋 추가하는 화면 제공되는 영역 끝 -->
</table>
</script>
</body>
<script>
const tb_dept = $('#tb-dept').html();
const template = Handlebars.compile(tb_dept);
const data = {
depts: [
{ deptno: 10, dname: '개발1팀', loc: '서울' },
{ deptno: 20, dname: '운영팀', loc: '제주' },
{ deptno: 30, dname: '품질관리팀', loc: '세종' },
],
};
const deptList = template(data);
$('body').append(deptList);
</script>
</html>
bookList.ejs
<div class="row mt-5 justify-content-end">
<div class="col-6 col-md-4">
<form name="frm">
<div class="input-group">
<input type="text" name="query" class="form-control" value="자바" />
<button class="btn btn-danger">검색</button>
</div>
</form>
</div>
</div>
<hr />
<div class="row" id="list_book"></div>
<script>
Handlebars.registerHelper('format', function (price) {
return price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + '원';
});
Handlebars.registerHelper('image', function (thum) {
if (thum) return thum;
else return 'https://via.placeholder.com/120x174';
});
</script>
<script id="temp_book" type="text/x-handlebars-template">
{{#each documents}}
<div class='col-6 col-md-4 col-lg-2'>
<div class='card my-2'>
<div class='card-body'>
<img
src='{{image thumbnail}}'
index='{{@index}}'
alt='도서이미지'
style='cursor: pointer;width: 80%;'
/>
<div class='mt-2'>
{{title}}
</div>
</div>
<div class='card-footer' style='font-size:0.6rem;'>
<div class='text-center'>
{{format price}}
<span
class='cart ms-3'
style='cursor:pointer;color:green'
>CART</span>
</div>
</div>
</div>
</div>
{{/each}}
</script>
<div class="text-center mt-2">
<button class="btn btn-primary btn-sm px-5" id="prev">이전</button>
<span id="page" class="px-3">1/10</span>
<button class="btn btn-primary btn-sm px-5" id="next">다음</button>
</div>
<script>
let query = $(frm.query).val();
let page = 1;
$('#next').on('click', () => {
page++;
bookList();
});
$('#prev').on('click', () => {
page--;
bookList();
});
$('#list_book').on('click', '.card img', () => {
let index = $(this).attr('index');
console.log(`사용자가 선택한 이미지 index값은 ${index}`);
});
const bookList = () => {
console.log(`page=${page}, query=${query}`);
$.ajax({
type: 'get',
url: 'https://dapi.kakao.com/v3/search/book?target=title',
headers: { Authorization: 'KakaoAK 4b140cf1d4428a43b2d0318382e7b264' },
data: { query: query, page: page, size: 20 },
dataType: 'json',
success: function (data) {
console.log(data);
const temp = Handlebars.compile($('#temp_book').html());
$('#list_book').html(temp(data));
let is_end = data.meta.is_end;
console.log(`너 마지막 페이지야? ${is_end}`);
let total = data.meta.total_count;
console.log(`검색결과의 총 레코드 수 ${total}`);
let last = Math.ceil(total / 20);
$('#page').text(`${page}/${last}`);
if (page === 1) $('#prev').attr('disabled', true);
else $('#prev').attr('disabled', false);
if (is_end) $('#next').attr('disabled', true);
else $('#next').attr('disabled', false);
},
error: function (error) {
console.log(error);
},
});
};
bookList();
$(frm).on('submit', (e) => {
e.preventDefault();
query = $(frm.query).val();
page = 1;
bookList();
});
</script>
routes-index.js