JSFiddle - React, Tailwind, and code Playground
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./index.css">
<title>Document</title>
</head>
<body>
<div id="h1Block">
<h1>TO-DO-LIST</h1>
</div>
<div id="inputBlock">
<div class="input-area">
<input type="text" id="input" placeholder="請輸入待辦事項...">
<select onchange="changeInputColor()" name="" id="priorSelect">
<option id="" value="normal">Normal</option>
<option id="" value="important">Important</option>
<option id="" value="urgent">Urgent</option>
</select>
<button onclick="inputBtn()" class="inputBtn">Submit</button>
<button onclick="exportBtn()" class="exportBtn">Export</button>
</div>
</div>
<div id="outputBlock">
<ul id="list">
</ul>
</div>
<script src="./index.js"></script>
</body>
</html>
CSS
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
body {
background-color: darkslategray;
/* background-repeat: none; */
background-size: cover;
}
#h1Block {
color: whitesmoke;
font-size: larger;
font-family: Fantasy;
font-weight: bolder;
text-decoration: underline;
text-align: center;
}
#inputBlock {
display: flex;
justify-content: center;
align-items: center;
}
#input {
flex: 1;
font-size: 20px;
border-radius: 10px;
border: 2px solid black;
}
#input:focus{
border: 5px solid gray;
}
.redFont {
color: red;
}
.orangeFont {
color: orange;
}
.blackFont {
color: black;
}
.inputBtn {
border: 2px solid black;
font-size: 18px;
border-radius: 8px;
background-color: darkred;
color: white;
padding: 1px;
}
.inputBtn:hover {
border: 2px solid darkred;
cursor: pointer;
font-size: 18px;
border-radius: 8px;
background-color: white;
color: black;
padding: 1px;
}
.exportBtn {
border: 2px solid black;
font-size: 18px;
color: white;
background-color:blueviolet;
border-radius: 8px;
padding: 1px;
}
.exportBtn:hover {
cursor: pointer;
border: 2px solid blueviolet;
font-size: 18px;
color: black;
background-color:white;
border-radius: 8px;
padding: 1px;
}
#outputBlock {
width: 400px;
margin: auto;
}
#list{
/* border: 5px solid black; */
}
#list li {
list-style-type: none;
display: flex;
justify-content:flex-end;
padding: 1px;
margin: 15px;
background-color: lightblue;
border-radius: 5px;
/* border: 3px solid black; */
}
#list li span{
flex: 1px;
text-align: left;
font-size: 18px;
padding: 6px;
/* border: 1px solid black; */
}
#list li p{
flex: 1px;
text-align: left;
font-size: 18px;
padding: 6px;
/* border: 1px solid black; */
}
#list button {
border-radius: 5px;
border: 0 px;
...
JavaScript
function inputBtn() {
const listText = document.querySelector('#input').value;
let list = document.querySelector('#list');
let elemSpan = document.createElement('span');
let elemLi = document.createElement('li');
let elemBtn = document.createElement('button');
let doneBtn = document.createElement('button');
let statusText = document.createElement('p');
let prior = document.querySelector('#priorSelect');
let index = prior.selectedIndex;
let priorText = prior.options[index].text;
if(listText==""){
alert("您未輸入待辦事項:(");
}else{
elemSpan.textContent = listText;
doneBtn.textContent = '[標記完成]';
elemBtn.textContent = 'Delete';
statusText.textContent = '(已完成)';
statusText.className = 'statusText';
doneBtn.className = 'doneBtn';
list.append(elemLi);
elemLi.append(elemSpan,statusText,doneBtn,elemBtn);
elemBtn.onclick = delBtn;
doneBtn.onclick = statusCheck;
if (priorText == 'Important') {
elemSpan.className = 'important';
}
if (priorText == 'Urgent') {
elemSpan.className = 'urgent';
}
}
}
function delBtn() {
event.target.closest('li').remove();
}
function exportBtn() {
let listText = document.querySelectorAll('li span');
let exportText = "待辦事項: ";
let num = 1;
if(listText.length==0){
alert("無清單可匯出:(");
}else{
for (var x of listText) {
if (x.className == 'important') {
exportText = exportText + '(' + num.toString() + ')*' + x.textContent + "* ";
} else if (x.className == 'urgent') {
exportText = exportText + '(' + num.toString() + ')**' + x.textContent + "** ";
} else {
exportText = exportText + '(' + num.toString() + ')' + x.textContent + " ";
}
num = num + 1;
}
alert(exportText);
...