目录
- html和css代码
- 1 实现点击input输入框添加任务
- 2 存储所添加的任务
- 3 实现点击点击任务切换任务效果
html和css代码
<style>
.fun{
background-color: red;
text-decoration: line-through;
}
</style>
</head>
<body>
<ul class='nav' id="nav">
<li><span>榴莲</span></li>
<li><span>臭豆腐</span></li>
<li><span>鲱鱼罐头</span></li>
<li><span>大猪蹄子</span></li>
</ul>
<form>
<input type="text" placeholder="请输入文字" >
<button >提交</button> <!--type="button"-->
</form>
</body>
1 实现点击input输入框添加任务
首先获取元素并创建本地存储ls
window.addEventListener('load',function (){
let ls=localStorage; //添加本地存储
let input=document.querySelector('input');
let button=document.querySelector('button');
let ul=document.querySelector('ul');
然后为button添加点击事件(这是为button添加阻止默认操作,因为button在form里面,会自动提交刷新页面。其实为input添加type="button"也可以实现同种效果。)
整体思路就是
1 先判断input是否输入为空,若为空就弹出提示框,否则就继续执行操作。
2 清空每次输入input后的值
3 创建一个li标签,用来做新任务
4 把input输入的值inputValue添加到新建li标签中
5 把新建li标签添加到ul标签中,实现新任务的添加
button.addEventListener('click',(e)=>{
e.preventDefault(); //阻止button点击事件的默认操作
/*添加和存储任务*/
if (input.value==''){alert('请输入数据')} //判断input是否输入为空
else {
let inputValue = input.value;//把input输入的值赋值给inputValue
input.value = ''; //清空每次输入input后的值
let newLi = document.createElement('li'); //创建一个li标签,用来做新任务
newLi.innerHTML = '<li>' + '<span>'+inputValue+'</span>' + '</li>';//把input输入的任务放到li标签上,实现新任务的创建
ul.appendChild(newLi); //把新建li标签添加到ul标签里,实现新任务的添加
2 存储所添加的任务
1 使用Array.from()方法,把ul.querySelectorAll(‘span’)所选中的ul下的所有span标签的伪数组全部转换成真数组
2 利用map方法实现把数组中每一元素在innerHTML中的书写(也就是input输入的任务)都储存到一个数组里面
3 以键值对的形式转换成JSON格式,实现把所有任务存储到本地存储
let cunChuArrs = Array.from(ul.querySelectorAll('span')); //把ul下面的所有li标签的伪数组转换成真数组
console.log(cunChuArrs) //[li, li, li, li, li] Array
let cunChuArr = cunChuArrs.map(e => e.innerHTML); //????map箭头用法 利用map方法实现把真数组里面所有元素在innerHtml中的书写(也是所有的任务,包括新建任务)都存储到一个新数组里面
console.log(cunChuArr); //['榴莲', '臭豆腐', '鲱鱼罐头', '大猪蹄子', '456'] Array
// console.log(JSON.stringify(cunChuArr)) //["榴莲","臭豆腐","鲱鱼罐头","大猪蹄子","<li>123</li>"]
ls.setItem('cunchushuju', JSON.stringify(cunChuArr));//以键值对的形式转换成JSON格式把所有任务命名为cunchushuju存储到本地存储
});//button点击事件结尾
3 解析本地存储(解析本地存储放在button点击事件之前。因为我们要先判断本地存储是否有存储数据,若有存储数据,就调用存储数据,若没有,就判断input添加新任务)
1 首先用if语句判断是否有本地存储,然后用Json.parse解析ls.getItem(‘’),转换成普通数组
2 定义一个空字符串,然后对解析后的数组arr遍历操作实现字符串的拼接s+=‘<li><span>‘+ele+’</span></li>’,然后把新字符串赋值给ul.inneHTML打印到Document页面中,实现存储数据的添加
<script>
window.addEventListener('load',function (){
let ls=localStorage; //添加本地存储
let input=document.querySelector('input');
let button=document.querySelector('button');
let ul=document.querySelector('ul');
// console.log(ul.children);
// console.log(ul.childNodes);
// var arr=Array.from(ul.childNodes); //将节点列表转化成真数组
// console.log(arr);
/*解析存储任务*/
if (ls.getItem('cunchushuju')){
//console.log(ls.getItem('cunchushuju'))
let arr=JSON.parse(ls.getItem('cunchushuju'));
// console.log(arr);
/*添加存储任务*/
var s='';
arr.forEach((ele)=>{
s+='<li><span>'+ele+'</span></li>';
//console.log(s);
})
ul.innerHTML=s;
};
ul.addEventListener('click',function (e){ //委托事件
// console.log(e.target)
e.target.classList.toggle('fun');
})
3 实现点击点击任务切换任务效果
用委托事件实现选中ul绑定所有的li,使用classList.toggle()切换类名,实现改变任务的状态
ul.addEventListener('click',function (e){ //委托事件
// console.log(e.target)
e.target.classList.toggle('fun');
})