ToDoList—最简单的待办事项列表

ToDoList—最简单的待办事项列表

代码如下:(样式与网上的相同,js代码不同)

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
		<title>ToDoList—最简单的待办事项列表</title>
		<meta name="description" content="ToDoList无须注册即可使用,数据存储在用户浏览器的html5本地数据库里,是最简单最安全的待办事项列表应用!" />
		<link rel="stylesheet" href="./css/index.css">
	</head>
	<body>
		<header>
			<section>
				<form action="" id="form" onclick="">
					<label for="title">ToDoList</label>
					<input type="text" id="title" name="title" placeholder="添加ToDo" required="required"
						autocomplete="off" />
				</form>
			</section>
		</header>
		<section>
			<h2>正在进行 <span id="todocount">0</span></h2>
			<ol id="todolist" class="demo-box">

			</ol>
			<h2>已经完成 <span id="donecount">0</span></h2>
			<ul id="donelist">
			</ul>
		</section>
		<footer>
			Copyright &copy; 2014 todolist.cn <a href="javascript:clear();">clear</a>
		</footer>
		<script type="text/javascript">
			var title = document.querySelector('#title');
			var ol = document.querySelector('#todolist')
			var ul = document.querySelector('#donelist')
			load();
			// 添加li
			title.addEventListener('keydown', function(e) {
				e = e || window.event;
				if (e.keyCode == 13) {
					if (title.value == '') {
						return
					} else {
						var todolist = {
							title: title.value,
							done: false
						}
						var arr = getdata();
						arr.push(todolist);
						saveData(arr);
						load()
					}
				}
			})  
			//存储数据
			function saveData(todolist) {
				return window.localStorage.setItem('todo', JSON.stringify(todolist))//转化为字符串存储
			}
			//获取数据并存储
			function getdata() {
				var data = window.localStorage.getItem('todo')
				if (data) {
					return JSON.parse(data); //转化为对象
				} else {
					return [];
				}
			}
			//刷新
			function load() {
				//获取最新的存储数据
				var ol = document.querySelector('#todolist')
				var ul = document.querySelector('#donelist')
				var todoCount = document.querySelector('#todocount');
				var doneCount = document.querySelector('#donecount');
				var num = 0;
				var data = getdata()
				//删除原来的子节点,重新填入
				var childs = ol.childNodes;
				for (var i = childs.length - 1; i >= 0; i--) {
					ol.removeChild(childs[i]);
				}
				var childs = ul.childNodes;
				for (var i = childs.length - 1; i >= 0; i--) {
					ul.removeChild(childs[i]);
				}
				var todocount = 0;
				var donecount = 0;
				data.forEach(function(item, index) {
					var li = document.createElement('li')
					li.innerHTML = "<input class='change' type='checkbox'/><p>" + item.title + "</p><a href='#'></a>";
					li.className = num++;
					if (item.done) {
						ul.insertBefore(li, ul.children[0])
						li.children[0].checked = 'checked'
						donecount++
					} else {
						ol.insertBefore(li, ol.children[0])
						todocount++
					}
				})
				todoCount.innerText = todocount
				doneCount.innerText = donecount
			}
			//删除
			ol.addEventListener('click', function(e) {
				e = e || window.event;
				if (e.target.nodeName == 'A') {
					ol.removeChild(e.target.parentNode)
					var data = getdata();
					data.splice(e.target.parentNode.className, 1);
					saveData(data);
					load();
				}
			})

			// 进行与完成之间跳转
			ol.addEventListener('click', function(e) {
				e = e || window.event;
				if (e.target.className == 'change') {
					var remove = ol.removeChild(e.target.parentNode);
					var data = getdata();
					data[e.target.parentNode.className].done = true;
					saveData(data);
					load();
				}

			})
			ul.addEventListener('click', function(e) {
				e = e || window.event;
				if (e.target.className == 'change') {
					var remove = ul.removeChild(e.target.parentNode);
					var data = getdata();
					data[e.target.parentNode.className].done = false;
					saveData(data);
					load();
				}

			})

			//编辑li文本
			var n = 0;
			ol.addEventListener('click', function(e) {
				if (e.target.nodeName === 'P') {
					var p = e.target;
					var title = p.innerHTML
					p.innerHTML = "<input type='text' id='input' value='" + title + "'/>"
					var input = document.getElementById('input')
					input.select() //选中input中内容
					input.addEventListener('blur', function() {
						if (input.value) {
							var data = getdata();
							// var index = 'input'.substring(1);//字符串截取 索引1及其后所有的字符
							// console.log(index);//nput
							data[e.target.parentNode.className].title = input.value;
							saveData(data);
							load();
						}else{
							alert('不能为空!');
						}
					})
				}
			})
		</script>
	</body>
</html>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单待办事项管理系统的实现: 首先,在 HTML 中创建一个表单,包含一个输入框和一个按钮,用于添加新的待办事项: ```html <form> <input type="text" id="newTodo" placeholder="Add a new todo..."> <button type="submit" onclick="addTodo()">Add</button> </form> ``` 然后,在 CSS 中定义一些样式,使表单看起来更好看: ```css form { margin-bottom: 20px; text-align: center; } input[type="text"] { padding: 10px; font-size: 16px; border: 1px solid #ccc; border-radius: 4px; margin-right: 10px; } button { padding: 10px; font-size: 16px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer; } button:hover { background-color: #3e8e41; } ``` 接下来,在 JavaScript 中定义一个数组,用于存储所有的待办事项: ```javascript var todos = []; ``` 然后,定义一个函数,用于添加新的待办事项。该函数会获取输入框中的文本,将其添加到数组中,并且重新渲染待办事项列表: ```javascript function addTodo() { var newTodo = document.getElementById('newTodo').value; todos.push(newTodo); renderTodos(); } ``` 接着,定义一个函数,用于渲染待办事项列表。该函数会遍历数组中的每个待办事项,创建一个新的 HTML 元素,并将其添加到一个列表中: ```javascript function renderTodos() { var todoList = document.getElementById('todoList'); todoList.innerHTML = ''; for (var i = 0; i < todos.length; i++) { var todo = todos[i]; var li = document.createElement('li'); li.innerHTML = todo; todoList.appendChild(li); } } ``` 最后,在 HTML 中添加一个空的列表,用于显示所有的待办事项: ```html <ul id="todoList"></ul> ``` 现在,整个待办事项管理系统就完成了。用户可以在输入框中添加新的待办事项,系统会将其添加到列表中并展示出来。当然,这只是一个简单的示例,你可以根据自己的需求进一步扩展和优化这个系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值