<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>t11_addClass.html(addClass/removeClass)</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<!-- <script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.slim.min.js"></script> -->
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
<script>
'use strict';
let selectedNum = 0;
$(() => {
// 자동으로 날짜li생성
let str = '';
let today = new Date();
let year = today.getFullYear();
let month = today.getMonth();
// let date = today.getDate();
let day = new Date(year,month,1).getDay();
console.log('1일의 요일: ',day);
let lastDate = new Date(year,month+1,0).getDate();
console.log('마지막날:',lastDate);
for(let i=0; i<day ; i++){
str += `<li> </li>`;
}
for(let i=0; i<lastDate ; i++){
str += `<li>${i+1}</li>`;
}
$('.days').append(str);
// 달력상단 현재날짜 기준으로 고치기
$('#todayMonth').text(`${month+1}월`)
$('#todayYear').text(`${year}년`)
// 기존 클래스의 존재유무? hasClass()
// 선택된 셀의 개수를 demo에 출력한다.
let maxNum,minNum,thisNum;
let selectedArr = [];
$('.days li').on('click',function(){
console.log('셀선택: ',$(this).text());
if($(this).hasClass('active')){//누른게 선택된 셀이면
$(this).removeClass('active');
selectedNum--;
}
else{ // 누룬게 선택된 셀이 아니면
$(this).addClass('active');
if(selectedNum == 0){
maxNum=Number($(this).text());
minNum=Number($(this).text());
selectedNum++;
}
else{
thisNum = Number($(this).text());
if(thisNum > maxNum) maxNum = thisNum;
else minNum = thisNum;
console.log('작은날짜: ',minNum,', 큰날짜: ',maxNum)
for(let i=minNum; i<=maxNum ; i++){
$(`.days li:nth-child(${i+day})`).addClass('active');
console.log(i);
selectedNum++;
}
$('#demo').html(`선택된 날짜 : ${minNum}일 ~ ${maxNum}일 <button class="btn btn-sm btn-dark ml-3" xxonClick="location.reload()">다시선택</button>`);
selectedNum--;
}
}
});
});
</script>
<style>
* {box-sizing: border-box;}
ul {list-style-type: none;}
body {font-family: Verdana, sans-serif;}
.month {
padding: 70px 25px;
width: 100%;
background: #1abc9c;
text-align: center;
}
.month ul {
margin: 0;
padding: 0;
}
.month ul li {
color: white;
font-size: 20px;
text-transform: uppercase;
letter-spacing: 3px;
}
.month .prev {
float: left;
padding-top: 10px;
}
.month .next {
float: right;
padding-top: 10px;
}
.weekdays {
margin: 0;
padding: 10px 0;
background-color: #ddd;
}
.weekdays li {
display: inline-block;
width: 13.6%;
color: #666;
text-align: center;
}
.days {
padding: 10px 0;
background: #eee;
margin: 0;
}
.days li {
list-style-type: none;
display: inline-block;
width: 13.6%;
text-align: center;
margin-bottom: 5px;
font-size:12px;
color: #777;
padding: 20px 10px;
}
.days li.active {
padding: 5px;
background: #1abc9c;
color: white !important
}
/* Add media queries for smaller screens */
@media screen and (max-width:720px) {
.weekdays li, .days li {width: 13.1%;}
}
@media screen and (max-width: 420px) {
.weekdays li, .days li {width: 12.5%;}
.days li .active {padding: 2px;}
}
@media screen and (max-width: 290px) {
.weekdays li, .days li {width: 12.2%;}
}
</style>
</head>
<body>
<h1 class="text-center mt-3">CSS Calendar</h1>
<p class="text-center">표의 내용을 클릭하면 선택/취소 됩니다.</p>
<div class="month">
<ul>
<li>
<span id="todayMonth">1월</span><br>
<span style="font-size:18px" id="todayYear">2024</span>
</li>
</ul>
</div>
<ul class="weekdays">
<li>일</li>
<li>월</li>
<li>화</li>
<li>수</li>
<li>목</li>
<li>금</li>
<li>토</li>
</ul>
<ul class="days">
</ul>
<div id="demo"></div>
</body>
</html>
첫댓글 잘 하셨네요..ㅎ
만년달력으로 처리해 보시면 더 좋을듯요.. 수고하셨습니다.