JavaScript 系列五:第2課
── 學會 Local Storage 相關功能
by applelily
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript 系列五:第2課 ── 學會 Local Storage 相關功能</title>
<link rel="stylesheet" href="./02_js_local-storage.css">
</head>
<body>
<div class="bg-container">
<div class="input_text">
<h1>
To Do List
</h1>
<div class="input_container">
<input type="text" id="to_do" class="to_do" placeholder="新增待辦事項...">
<select id="list_level" class="list_level" >
<option value="normal" selected>一般</option>
<option value="important" >重要</option>
<option value="urgent" >緊急</option>
</select>
<button id ="add_list" class="add_list" onclick="addList()">+</button>
<button class="todo_btn export_btn" onclick="exportList('export')">匯出清單</button>
<button class="todo_btn save_btn" onclick="exportList('save')">儲存</button>
</div>
</div>
<div class="to_do_list">
<h3>待辦事項的清單</h3>
<div class="to_do_list_container">
<ul id="to_do_list_ul" class="to_do_list_ul">
</ul>
</div>
</div>
</div>
<script src="./02_js_local-storage.js"></script>
</body>
</html>
CSS
* {
margin: 0;
padding: 0;
}
body{
color: #82715f;
}
.bg-container{
background-image: url('https://imgur.com/0GIPhB0.jpg');
width: 640px;
min-height: 100px;
border-radius: 8px;
margin:auto;
padding-top: 20px;
padding-bottom: 30px;
}
select{
padding: 5px 10px;
/* height: 2.2em; */
font-size: 18px;
}
.input_text h1{
margin-left: 40px;
}
.input_container{
margin-left: 40px;
width: 560px;
display: flex;
}
.input_text input{
min-width: 300px;
/* height: 2em; */
font-size: 18px;
padding-left: 10px;
}
.add_list{
border: none;
color: #fff;
background-color: #82715f;
width: 50px;
font-size: 30px;
}
.todo_btn{
border: none;
color: #fff;
background-color: #82715f;
width: 100px;
border-radius: 8px;
margin-left: 10px;
padding: 5px 10px;
font-size: 18px;
cursor: pointer;
}
.to_do_list{
background-color: #f2eee2;
border-radius: 10px;
width: 530px;
min-height: 500px;
margin: auto;
margin-top: 20px;
padding: 10px 10px;
}
.to_do_list h3{
text-align: center;
line-height: 2;
letter-spacing: 0.3em;
border-bottom: 1px dashed #C8C8C8 ;
}
.to_do_list_ul{
padding-left: 20px;
}
.to_do_list_ul li{
padding: 10px 10px;
border-bottom: 1px dashed #C8C8C8 ;
}
.todo_group{
position:relative;
width: 480px;
}
.todo_txt{
width: 380px;
word-wrap: break-word;
word-break: break-all;
display: inline-block; /* 確保 span 元素遵守寬度規則 */
}
.important_li{
color:#ff8c00;
}
.urgent_li{
color:#ff0000;
}
.del_btn{
position: absolute;
right: 5px;
/* float: right; */
width: 25px;
height: 25px;
color: #fff;
background-color:#82715f;
font-size: 20px;
}
.del_btn:hover{
background-color: #ff0000;
cursor: pointer;
}
.on_off_btn {
position: absolute;
right:-25px;
/* float: right; */
width: 25px;
...
JavaScript
let elem_toDo = document.querySelector('#to_do') ;
let elem_toDo_class= elem_toDo.className ;
elem_toDo.addEventListener("keypress",
function(event)
{
if(event.key === "Enter") {
document.querySelector('#add_list').click();
}
}
)
let elem_select = document.querySelector("#list_level");
let elem_select_class= elem_select.className ;
// 監聽選擇框的變化
elem_select.addEventListener("change",
function() {
// 取得當前選擇的選項值
let selectedValue = elem_select.value;
// 根據選擇的值來決定文字顏色
if (selectedValue === "important") {
elem_select.className = elem_select_class +
" important_li";
elem_toDo.className =
elem_toDo_class +
" important_li";
} else if (selectedValue === "urgent") {
elem_select.className =
elem_select_class +
" urgent_li";
elem_toDo.className =
elem_select_class +
" urgent_li";
} else if (selectedValue === "normal") {
elem_select.className =
elem_select_class +
" normal_li";
elem_toDo.className =
elem_select_class +
" normal_li";
}
// else {
// elem_select.className = elem_select_class;
// elem_toDo.className = elem_toDo_class
// }
}
);
function addList(){
let toDoValue = document.querySelector('#to_do').value;
let elem_value_select =
document.querySelector('#list_level').value;
if (toDoValue!="") {
let elem_li = document.createElement('li');
if (elem_value_select == 'important'){
elem_li.className = "important_li";
}
if (elem_value_select == 'urgent'){
elem_li.className = "urgent_li";
}
if (elem_value_select == 'normal'){
elem_li.className = "normal_li";
}
let elem_ul =...