利用原生js完成一个todoList

因为在接口,时间有些充足。想着自己屎一般的js,打算重新来学学一些和js有关的技能

据说学习js,十个有九个都是从todoList开始的,那当然,我也是要从众的。

新建一个html文件,随意署名。todo内容主要保存在localstorage里面,不涉及到数据库什么的,比较简单。

很随意的写了几个框,又很随意的写了css。大概长这样
在这里插入图片描述
框框部分的html如下。

<div class="main">
    <div class="needToDo">
        <input class="inp" type="text" id="inp" placeholder="请输入你想要完成的事情" placeholder-class="plas" />
        <button type="button" class="save" id="saveData">保存</button>
    </div>
    <div class="saveContent">
        <p>未完成</p>
        <ul class="saveUl" id="saveUl">
        </ul>
    </div>
</div>
<div class="finished">
    <p>已完成</p>
    <p>
        <a class="clearAll" id="clearAll">清空已完成</a>
    </p>
    <ul class="finishedUl" id="finishedUl">
    </ul>
</div>

上部分是未完成的,下部分是已完成。

未完成的部分有个输入框和确认按钮。
接下来写功能。
添加功能:

saveData.addEventListener('click', function() {
	//新建一个li
    var dom = document.createElement('li');
    //li里面的内容,就是一个checkbox复选框,一个自己添加的内容。
    dom.innerHTML = '<input type = "checkbox" name="checkVal" value=' + inp.value + ' />' +
    '<span>' + inp.value + '</span>'
    //拼装好html后,append到ul里面
    //将li添加到ul里。这里使用的是appened方法
    saveUl.appendChild(dom);
    arrs.push(inp.value)   //这里的arrs 就是前面localstorage得到的那个arrs
    console.log(arrs)
    //将得到的自己写的todo,添加到arr数组里,然后保存在storage里面。
    localStorage.setItem('unfinished', arrs)
    inp.value = ""
})

这里就要说到一点,因为这个不像vue这一类的,是双向绑定,所以说,有时候写完了保存后,需要刷新一下,才能看到最新写好的东西
在这里插入图片描述

然后,将已保存的未完成已完成 展现在页面上。

//未完成的数据
var unfinished = localStorage.getItem('unfinished');
//已完成的数据
var finished = localStorage.getItem('finished');
var arrs = []
var finishedArrs = [];
    if (unfinished) {
    //因为存到storage里是个字符串,所以需要分割出来。
    arrs = unfinished.split(',');
    for (var i = 0; i < arrs.length; i++) {
        var dom = document.createElement('li');
        //分割出来后拼接,展示在页面上
        dom.innerHTML = '<input type = "checkbox"  name="checkVal" value=' + arrs[i] + ' />' +
        	'<span>' + arrs[i] + '</span>'
        saveUl.appendChild(dom);
    }
}
if(finished){
    finishedArrs = finished.split(',');
    for (var i = 0; i < finishedArrs.length; i++) {
        var dom = document.createElement('li');
        dom.innerHTML = '<input type = "checkbox" checked  name="checkVal" value=' + finishedArrs[i] + ' />' +
        	'<span>' + finishedArrs[i] + '</span>'
        finishedUl.appendChild(dom);
    }
}

接下来是已完成功能,已完成功能和未完成其实大致是差不多的 点击未完成前面的复选框,选中后,从未完成中删除此选项,添加在已完成中

var checkBoxs = document.getElementsByName("checkVal");
//添加完成效果,点击checkbox,此项就加入已完成
 for (var i = 0; i < checkBoxs.length; i++) {
      //因为都是个数组,所以获取批量的时间,然后再获取当前的checkbox的时间
       //然后再得到他的父节点,给父节点加上字母截断的效果,然后再把这个从未完成中删除,添加进已完成中
       checkBoxs[i].addEventListener('change', function(event) {
       var parentLi = event.target.parentNode;
       parentLi.style.textDecoration = "line-through"
       finishedArrs.push(parentLi.innerText)
       for (var j = 0; j < arrs.length; j++) {
       	if (arrs[j] == parentLi.innerText) {
       		console.log(j)
       		//查到当前选中的是数组中的第几个,然后从未完成中删掉,加入已完成
       		arrs.splice(j, 1)
       		localStorage.setItem('unfinished', arrs)
       		//这一句是强制页面刷新
       		window.location.reload();
       	}
       }
   localStorage.setItem('finished', finishedArrs)
})

}

在这里插入图片描述

写到最后其实就差不多了,但是有个问题,也是没想通。
我添加了新的项目,没能立即将它变为已完成,这里应该需要其他的写法,不过暂时没想到。哈哈

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌村村花杨小花

谢谢大佬!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值