<div class="header">
<section>
<label for="">ToDoList</label>
<input type="text" id="title" name="title" placeholder="添加ToDo" required>
</section>
</div>
<section>
<h2>正在进行<span id="todocunt"></span></h2>
<ol id="todolist" class="demo-box">
<!-- <li>
<input type="checkbox" name="" id="">
<p>123</p>
<a href="#"></a>
</li> -->
</ol>
<h2>已经完成<span id="donecount"></span></h2>
<ul id="donelist"> </ul>
<footer>
Copyright &copy; 2014 todolist.cn
</footer>
</section>
$(function () {
// localStorage.removeItem('todolist')
load();
$("#title").on("keydown", function (event) {
if (event.keyCode === 13) {
if ($(this).val() === "") {
alert("请输入内容")
} else {
var local = getDate();
// 把最新的数据追加给local数组
local.push({ title: $(this).val(), done: false })
// 把这个数组local 存储给本地存储
saveData(local);
load()
$(this).val("")
}
}
}) // 读取本地存储的数据
function getDate() {
var data = localStorage.getItem("todolist")
if (data !== null) {
return JSON.parse(data);
} else {
return [];
}
} // 保存本地存储数据
function saveData(data) {
localStorage.setItem("todolist", JSON.stringify(data));
} // todolist删除
$("ol,ul").on("click", "a", function () {
var data = getDate();
// 修改数据
var index = $(this).attr("id")
data.splice(index, 1)
// 保存到本地存储
saveData(data);
// 重新渲染页面
load()
}) // 选项操作
$("ol,ul").on("click", "input", function () {
var data = getDate();
//修改数据
var index = $(this).siblings("a").attr("id")
data[index].done = $(this).prop("checked")
// 保存本地存储
saveData(data)
// 重新渲染
load()
}) // 渲染数据
function load() {
// 读取本地存储数据
var data = getDate();
// 遍历之前需要清空ol里面的内容
$("ol,ul").empty()
var todoCount = 0;
var doneCount = 0;
$.each(data, function (i, n) {
if (n.done) {
$("ul").prepend("<li><input type='checkbox' checked='checked'> <p>" + n.title + "</p> <a href='javadcript:;' id=" + i + ">删除</a></li>")
doneCount++;
}
else {
$("ol").prepend("<li><input type='checkbox'> <p>" + n.title + "</p> <a href='javadcript:;' id=" + i + ">删除</a></li>");
todoCount++;
}
})
$("#todocunt").text(todoCount)
$("#donecount").text(doneCount) }
})
body {
margin:;
} .header {
height: 50px;
line-height: 50px;
background: rgba(47, 47, 47, 0.98);
} section {
width: 600px;
padding: 0 10px;
margin: 0 auto; } label {
float: left;
width: 100px;
line-height: 50px;
color: #DDD;
font-size: 24px;
cursor: pointer;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
} .header input {
float: right;
width: 60%;
height: 24px;
margin-top: 12px;
text-indent: 10px;
border-radius: 5px;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.24), 0 1px 6px rgba(0, 0, 0, 0.45) inset;
border: none;
} h2 {
position: relative;
} ol,
ul {
padding:;
list-style: none;
} li {
height: 32px;
line-height: 32px;
background: #fff;
position: relative;
margin-bottom: 10px;
padding: 0 45px;
border-radius: 3px;
border-left: 5px solid #629A9C;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07);
}
li input {
position: absolute;
top: 2px;
left: 10px;
width: 22px;
height: 22px;
cursor: pointer;
}
ul li {
border-left: 5px solid #999;
opacity: 0.5;
}
a,span {
position: absolute;
top: 2px;
right: 5px;
display: inline-block;
padding: 0 5px;
height: 20px;
border-radius: 20px;
background: #E6E6FA;
line-height: 22px;
text-align: center;
color: #666;
font-size: 14px;
}

css

jQuery 综合练习ToDoList的更多相关文章

  1. Dojo与jQuery综合比较分析

    最近一直都在参与项目,无法抽空写些或者看些东西,周末抽了点时间看了下关于Dojo和Jquery的东西,在CSDN上看到一篇两个框架进行对比的文章,感觉写的不错,就拿了过来,没有别的意思,一来想保留下来 ...

  2. jquery综合

    1.选择器性能比较: http://www.jcodecraeer.com/a/javascript/2012/0418/112.html http://developer.51cto.com/art ...

  3. jquery综合练习--模态对话框传值,删除,新增表格行

    效果示例: 个人的练习代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  4. react综合案例-todolist、localstorage缓存数据

    1.工具类storage.js var app ={ set(key,value){ localStorage.setItem(key,JSON.stringify(value)); }, get(k ...

  5. jquery 综合使用例子

    效果如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  6. jQuery官网plugins栏目下那些不错的插件

    前言: 很久以前就关注过jQuery官网plugins栏目下那些全是英文的插件,本人的英文水平很菜,想要全部看懂确实是件不易之事. 好在大部分的案例中都有 view-homepage 或 Try a ...

  7. 使用jquery和使用框架的区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. jQuery(*****)

    参考1 参考2 1. jQuery 1. 选择器 $("") 1. 基本选择器 1. ID --> $("#d1") 2. 标签名 --> $(&q ...

  9. Vue (一) --- vue.js的快速入门使用

    =-----------------------------------把现在的工作做好,才能幻想将来的事情,专注于眼前的事情,对于尚未发生的事情而陷入无休止的忧虑之中,对事情毫无帮助,反而为自己凭添 ...

随机推荐

  1. java 面向对象(四):类结构 方法(一)

    类的设计中,两个重要结构之二:方法 方法:描述类应该具的功能. * 比如:Math类:sqrt()\random() \... * Scanner类:nextXxx() ... * Arrays类:s ...

  2. Flask 基础组件(二):配置文件

    配置参数 flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为: { 'DEBUG': get_debug_flag(default=False), 是否开启 ...

  3. 前端08 /jQuery标签操作、事件

    前端08 /jQuery标签操作.事件 目录 前端08 /jQuery标签操作.事件 1.标签内文本操作 1.1 html标签元素中的所有内容 1.2 text 标签元素的文本内容 2.文档标签操作 ...

  4. .NET Core 微服务—API网关(Ocelot) 教程 [一]

    前言: 最近在关注微服务,在 eShop On Containers 项目中存在一个API网关项目,引起想深入了解下它的兴趣. 一.API网关是什么 API网关是微服务架构中的唯一入口,它提供一个单独 ...

  5. .NET Core微服务开发网关篇-ocelot

    通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关. 环境要求: vs2019 .NetCore3.1 Ocelot16.0.1 创建一个产品服务Api站点(AAStore ...

  6. Python Ethical Hacking - ARPSpoof_Detector

    ARPSPOOF_DETECTOR Watch value for gateway mac in the arp table Nice and simple, but will not detect ...

  7. Linux 后台启动 Redis

    1. 修改 redis.conf 首先,这里有一个坑 ! 不同的 redis版本,在安装的时候,redis.conf 的路径稍微有些不同 redis.conf 可能出现的三个位置: /etc/redi ...

  8. DJANGO-天天生鲜项目从0到1-001-环境框架搭建

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  9. git pull 放弃本地修改, 全部使用远端代码

    git强制覆盖:    git fetch --all    git reset --hard origin/master    git pull git强制覆盖本地命令(单条执行):    git ...

  10. Kafka 入门(二)--数据日志、副本机制和消费策略

    一.Kafka 数据日志 1.主题 Topic Topic 是逻辑概念. 主题类似于分类,也可以理解为一个消息的集合.每一条发送到 Kafka 的消息都会带上一个主题信息,表明属于哪个主题. Kafk ...