javascript - 显示特定优先任务(选择以获取特定任务列)
问题描述
我正在使用 HTML/CSS/JavaScript 做一个待办事项列表网页。我只显示了具有优先级(高/低/中)的用户输入的内容。我无法完成最后一部分(选择以获取特定任务)。
主要概念是,如果用户点击高/中/低按钮,它应该只显示相应的优先级列表。如果用户单击高优先级按钮,则仅显示高优先级列表数据。
高优先级(背景-红色),中优先级(背景-黄色),低优先级(背景-绿色)。您可以在任何地方显示最后一部分,此外,我们可以进行修改。
下面你可以看到我的代码。拜托,你能帮帮我吗?
const lists = document.getElementsByClassName('task-list')[0];
const radios = document.getElementsByName('rgPrior');
function onClick()
{
for (let i = 0, length = radios.length; i < length; i++)
{
if (radios[i].checked)
{
btn_selected_color = radios[i].value + 'P';
break;
}
}
const task = document.getElementById('item').value;
// Add it to the HTML
addTodo(task, btn_selected_color);
// Save it to localStorage
let data = JSON.parse(localStorage.getItem('todo')) || [];
data.push([
task,
btn_selected_color
]);
localStorage.setItem('todo', JSON.stringify(data));
}
function addTodo(todo, priority)
{
let entry = document.createElement('li');
let close = document.createElement('button');
entry.className = priority;
close.className = 'close-btn';
close.innerText = 'X';
close.addEventListener('click', function(e)
{
// Delete from localstorage
let data = JSON.parse(localStorage.getItem('todo'));
let index = data.indexOf([
todo,
priority
]);
data.splice(index, 1);
localStorage.setItem('todo', JSON.stringify(data));
// Delete HTML
this.parentElement.remove();
});
entry.appendChild(close);
entry.appendChild(document.createTextNode(todo));
lists.appendChild(entry);
}
// When the page is loaded, get from localStorage
window.addEventListener('load', function()
{
const data = JSON.parse(localStorage.getItem('todo'));
data.forEach(function(task)
{
addTodo(...task);
});
});
.hiP {background-color : red;}
.medP {background-color: #ffbf00;}
.lowP {background-color: green;}
.ch5 {padding-left: 30px;}
#box{
width: 500px;
padding: 20px;
margin: 20px;
margin-left: auto;
margin-right: auto;
background-color: white;
border-radius: 40px;
box-shadow: 0 5px 15px 0 rgba(0, 0, 0, .5);
}
#box1{
text-align: center;
width: 400px;
padding: 30px;
margin: 30px;
margin-left: auto;
margin-right: auto;
/* background-color: #140101; */
/* background-color: #37283b; */
background-image: linear-gradient(rgb(218, 76, 76),#d1b562, rgb(122, 233, 122));
border-radius: 20px;
}
#box2{
width: 400px;
padding: 30px;
margin: 30px;
margin-top: auto;
margin-left: auto;
margin-right: auto;
/* background-image: linear-gradient(red,#ffbf00, green); */
/* background-color: rgb(160, 10, 122); */
background-color: #c1d7f5;
border-radius: 20px;
}
#box3{
text-align: center;
width: 400px;
padding: 30px;
margin: 30px;
margin-top: auto;
margin-left: auto;
margin-right: auto;
/* background-color: rgb(22, 240, 22); */
background-color: #93f6c6;
border-radius: 20px;
}
.header{
/* background-color: #5a9cda; */
background-color: #38045a;
color: white ;
padding: 20px ;
margin-top: -10px;
margin: -10px;
font-size: large;
}
.footer{
position: fixed;
padding: 10px 10px 0px 10px;
margin: -10px;
font-size: large;
color: white;
bottom: 0;
width: 100%;
height: 40px;
/* background: #5a9cda; */
background-color: #04267c;
}
.button1 {
background-color: white;
color: black;
border: 2px solid #f44336;
border-radius: 10px;
}
.button1:hover {
background-color: #f44336;
color: white;
}
.button2 {
background-color: white;
color: black;
border: 2px solid #ffbf00;
border-radius: 10px;
}
.button2:hover {
background-color: #ffbf00;
color: white;
}
.button3 {
background-color: white;
color: black;
border: 2px solid green;
border-radius: 10px;
}
.button3:hover {
background-color: green;
color: white;
}
.button4 {
background-color: white;
color: black;
border: 2px solid green;
border-radius: 10px;
}
.button4:hover {
background-color: green;
color: white;
}
<div class="header" align="center">
<header>MY TO_DO LIST</header>
</div>
<div id="box">
<div id="box1" >
<form >
<label for="txtAdd" style="font-size: 20px;color: white;"><b> Enter New thing to do: </b></label>
<input name="txtAdd" type="text" id="item" />
</form>
<p style="font-size: 20px; color: white;"><b> Set Priority </b></p>
<p>
<label style="color: #ce1126; font-size: 20px;"><input type="radio" name="rgPrior" value="hi" id="rgPrior_0"/>HIGH</label>
<label style="color: #ce1126; font-size: 20px;"><input type="radio" name="rgPrior" value="med" id="rgPrior_1"/>MEDIUM</label>
<label style="color: #ce1126; font-size: 20px;"><input type="radio" name="rgPrior" value="low" id="rgPrior_2"/>LOW</label>
</p>
<input type="button" name="btnAdd" class="button4" id="btnAdd" value="Save The Task" onClick="onClick()" />
</div>
<p style="text-align: center; color: rgba(3, 95, 30, 0.767); font-size: 20px;"><b> WORK TO-DO </b></p>
<div id="box2">
<ul class="task-list"> </ul>
</div>
<div id="box3">
<p style" -20px;color: rgb(56, 4, 155); font-size: 20px;">Select to get Specific tasks</p>
<button class="button1">HIGH</button>
<button class="button2">MEDIUM</button>
<button class="button3">LOW</button>
</div>
</div>
<div class="footer" align="center" >
<marquee direction="right" >ThankYou, Visit again</marquee>
</div>
解决方案
这是一个如何过滤列表的工作示例:
const items = [{
value: 'Item 1',
className: 'low',
}, {
value: 'Item 2',
className: 'high',
}, {
value: 'Item 3',
className: 'low',
}, {
value: 'Item 4',
className: 'medium',
}, {
value: 'Item 5',
className: 'medium',
}];
const ul = document.getElementById('filtered-list');
const button1 = document.getElementById('high-priority');
const button2 = document.getElementById('medium-priority');
const button3 = document.getElementById('low-priority');
const createListItems = function createListItems(filteredList) {
ul.innerHTML = '';
filteredList.map((item) => {
const li = document.createElement('li');
li.append(item.value);
li.className = item.className;
ul.append(li);
});
};
const click = function click(event) {
event.preventDefault();
const t = this;
const filtered = items.filter(item => item.className === t.priority);
createListItems(filtered);
}
button1.addEventListener('click', click.bind({ priority: 'high' }));
button2.addEventListener('click', click.bind({ priority: 'medium' }));
button3.addEventListener('click', click.bind({ priority: 'low' }));
createListItems(items);
.high { background-color: red; }
.medium { background-color: yellow; }
.low { background-color: green; }
<ul id="filtered-list"></ul>
<button id="high-priority" type="button">High Priority</button>
<button id="medium-priority" type="button">Medium Priority</button>
<button id="low-priority" type="button">Low Priority</button>
以下是它在您的代码中的外观。只需从您的 HTML 中删除 onClick ,否则它将添加该项目两次。
const lists = document.getElementsByClassName('task-list')[0];
const radios = [...document.getElementsByName('rgPrior')];
const btnAdd = document.getElementById('btnAdd');
const button1 = document.getElementsByClassName('button1')[0];
const button2 = document.getElementsByClassName('button2')[0];
const button3 = document.getElementsByClassName('button3')[0];
const items = [];
const addTodo = function addTodo(todo, priority) {
const entry = document.createElement('li');
const close = document.createElement('button');
items.push({
value: todo,
className: priority,
});
entry.className = priority;
close.className = 'close-btn';
close.innerText = 'X';
close.addEventListener('click', function click(event) {
event.preventDefault();
// Delete from localstorage
const data = JSON.parse(localStorage.getItem('todo'));
const index = data.indexOf([
todo,
priority,
]);
data.splice(index, 1);
localStorage.setItem('todo', JSON.stringify(data));
// Delete HTML
this.parentElement.remove();
});
entry.appendChild(close);
entry.appendChild(document.createTextNode(todo));
lists.appendChild(entry);
};
const onClick = function onClick() {
let btnSelectedColor;
radios.map((radio) => {
if (radio.checked) {
btnSelectedColor = `${radio.value}P`;
}
return false;
});
const task = document.getElementById('item').value;
// Add it to the HTML
addTodo(task, btnSelectedColor);
// Save it to localStorage
const data = JSON.parse(localStorage.getItem('todo')) || [];
data.push([task, btnSelectedColor]);
localStorage.setItem('todo', JSON.stringify(data));
};
btnAdd.addEventListener('click', onClick);
const createListItems = function createListItems(filteredList) {
lists.innerHTML = '';
filteredList.map((item) => {
const li = document.createElement('li');
li.append(item.value);
li.className = item.className;
lists.append(li);
return false;
});
};
const filterItems = function filterItems(event) {
event.preventDefault();
const t = this;
const filtered = items.filter((item) => item.className === t.priority);
createListItems(filtered);
};
button1.addEventListener('click', filterItems.bind({ priority: 'hiP' }));
button2.addEventListener('click', filterItems.bind({ priority: 'medP' }));
button3.addEventListener('click', filterItems.bind({ priority: 'lowP' }));
// When the page is loaded, get from localStorage
window.addEventListener('load', () => {
const data = JSON.parse(localStorage.getItem('todo'));
data.forEach((task) => {
addTodo(...task);
});
});
推荐阅读
- reactivesearch - 在搜索结果中仅显示文本示例
- scala - Scala Future 中包装的 JDBC 调用
- php - 如何在不重新加载页面的情况下获得执行 PHP 函数的按钮?
- matlab - matlab中的主成分分析?
- slice - ND4J 切片是否会复制原始数组?
- javascript - css 动画不适用于 Internet Explorer 浏览器(转换)
- python - 使用 python3 进行字符串格式打印:有时会从解压的数组中打印
- flutter - 运行时带有未知图像的 FadeInImage
- html - 无法让悬停在导航锚点上工作
- javascript - 点击时如何获取图片的值