使用HTML将待办事项列表数据保存到本地存储

时间:2017-11-30 04:18:38

标签: javascript jquery jquery-ui

因此,如果我想保存本地存储中的所有待办事项并在重新启动计算机或刷新页面时检索所有项目按原始顺序出现在页面上。?

//check of spec
$("ol").on("click", "li", function(){
$(this).toggleClass("completed");

});

//click on X to delete To-DO

$("ol").on("click", "span", function(event){
	$(this).parent().fadeOut(500,function(){
		$(this).remove();
	});
	event.stopPropagation();
});

$("input[type='text'").keypress(function(event){
	if(event.which === 13) {
		//grabbing the text typed
		var todoText = $(this).val();
		$(this).val("");
		//create a new LI and add to UL
		$("ol").append("<li><span><i class='fa fa-trash'></i></span> " + todoText +"</li>")
	}
});

$(".fa-plus").click(function(){
	$("input[type='text'").fadeToggle();
});
h1 {
	background: #2980b9;
	color: white;
	margin: 0;
	padding: 10px 15px;
	text-transform: uppercase;
	font-size: 24px;
	font-weight: normal;

}

iframe {
	float: left;
}

ol {
	/* THE BULLET POINTS
	list-style: none;
	*/
	margin: 0;
	padding: 0;
	font-size: 18px;

}

body {

 background-color: rgb(13, 168, 108);

}

li {
	background: #fff;
	height: 30px;
	line-height: 30px;
	color: #666;
}

li:nth-child(2n){
	background: #d3d3d3;
}

span {

	height: 30px;
	width: 0px;
	margin-right: 20px;
	text-align: center;
	color:white;
	display: inline-block;
	transition: 0.2s linear;
	opacity:0;
	background: #e74c3c
	

}

li:hover span {
	width: 30px;
	opacity: 1.0;
}

input {
	font-size: 18px;
	width: 100%;
	padding: 13px 13px 13px 20px;
	box-sizing: border-box;
	border: 3px solid rgba(0,0,0,0);
	color: #2980b9;
	background-color: #e4e4e4;

}

input:focus {
	background: white;
	border: 3px solid green;

	/*OUTLINE OF INPUT BOX
	outlin: none; */
}

.fa-plus {
	float: right;
}


#container {
	
	width: 360px;
	margin: 60px auto;
	background: #d3d3d3;
	box-shadow: 0 0 3px rgba(0,0,0,0.1);


}

.completed {
	color: red;
	text-decoration: line-through;
}
<!DOCTYPE html>
<html>
<head>
	<title>ToDo List</title>
	<link rel="stylesheet" type="text/css" href="utd.css">
	<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
	<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">

	<script type="text/javascript" src="jquery-3.2.1.min.js"></script>
	<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
	 <script>
  $( function() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).disableSelection();
  } );

  </script>

</head>
<body>

	 <iframe src="http://free.timeanddate.com/clock/i5zr5d5i/n1991/szw110/szh110/hoc09f/hbw0/hfc09f/cf100/hnce1ead6/fas30/fdi66/mqc000/mql15/mqw4/mqd98/mhc000/mhl15/mhw4/mhd98/mmc000/mml10/mmw1/mmd98/hhc00f/hhs2/hmcf00/hms2/hsv0" frameborder="0" width="110" height="110"></iframe>


	<div id="container">
		<h1>To-do List <i class="fa fa-plus"></i></h1>
		<form id="task-list">
		<input type="text" placeholder="Add a To-Do" id="task">
	</form>
		<ol id="sortable">
			<li><span><i class="fa fa-trash"></i></span> EXAMPLE</li>
			
		</ol>
	</div>

	

<script type="text/javascript" src="Utd.js"></script>
</body>
</html>

3 个答案:

答案 0 :(得分:0)

//check of spec
$("ol").on("click", "li", function(){
$(this).toggleClass("completed");

});

//click on X to delete To-DO

$("ol").on("click", "span", function(event){
	$(this).parent().fadeOut(500,function(){
		$(this).remove();
	});
	event.stopPropagation();
});

$("input[type='text'").keypress(function(event){
	if(event.which === 13) {
		//grabbing the text typed
		var todoText = $(this).val();
		$(this).val("");
		//create a new LI and add to UL
		$("ol").append("<li><span><i class='fa fa-trash'></i></span> " + todoText +"</li>")
	}
});

$(".fa-plus").click(function(){
	$("input[type='text'").fadeToggle();
});
h1 {
	background: #2980b9;
	color: white;
	margin: 0;
	padding: 10px 15px;
	text-transform: uppercase;
	font-size: 24px;
	font-weight: normal;

}

iframe {
	float: left;
}

ol {
	/* THE BULLET POINTS
	list-style: none;
	*/
	margin: 0;
	padding: 0;
	font-size: 18px;

}

body {

 background-color: rgb(13, 168, 108);

}

li {
	background: #fff;
	height: 30px;
	line-height: 30px;
	color: #666;
}

li:nth-child(2n){
	background: #d3d3d3;
}

span {

	height: 30px;
	width: 0px;
	margin-right: 20px;
	text-align: center;
	color:white;
	display: inline-block;
	transition: 0.2s linear;
	opacity:0;
	background: #e74c3c
	

}

li:hover span {
	width: 30px;
	opacity: 1.0;
}

input {
	font-size: 18px;
	width: 100%;
	padding: 13px 13px 13px 20px;
	box-sizing: border-box;
	border: 3px solid rgba(0,0,0,0);
	color: #2980b9;
	background-color: #e4e4e4;

}

input:focus {
	background: white;
	border: 3px solid green;

	/*OUTLINE OF INPUT BOX
	outlin: none; */
}

.fa-plus {
	float: right;
}


#container {
	
	width: 360px;
	margin: 60px auto;
	background: #d3d3d3;
	box-shadow: 0 0 3px rgba(0,0,0,0.1);


}

.completed {
	color: red;
	text-decoration: line-through;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
	<title>ToDo List</title>
	<link rel="stylesheet" type="text/css" href="utd.css">
	<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
	<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">

	<script type="text/javascript" src="jquery-3.2.1.min.js"></script>
	<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
	 <script>
  $( function() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).disableSelection();
  } );

  </script>

</head>
<body>

	 <iframe src="http://free.timeanddate.com/clock/i5zr5d5i/n1991/szw110/szh110/hoc09f/hbw0/hfc09f/cf100/hnce1ead6/fas30/fdi66/mqc000/mql15/mqw4/mqd98/mhc000/mhl15/mhw4/mhd98/mmc000/mml10/mmw1/mmd98/hhc00f/hhs2/hmcf00/hms2/hsv0" frameborder="0" width="110" height="110"></iframe>


	<div id="container">
		<h1>To-do List <i class="fa fa-plus"></i></h1>
		<form id="task-list">
		<input type="text" placeholder="Add a To-Do" id="task">
	</form>
		<ol id="sortable">
			<li><span><i class="fa fa-trash"></i></span> EXAMPLE</li>
			
		</ol>
	</div>

	

<script type="text/javascript" src="Utd.js"></script>
</body>
</html>

//check of spec
$("ol").on("click", "li", function(){
$(this).toggleClass("completed");

});

//click on X to delete To-DO

$("ol").on("click", "span", function(event){
	$(this).parent().fadeOut(500,function(){
	//	$(this).remove();
	});
	//event.stopPropagation();
});

$("input[type='text'").keypress(function(event){
	if(event.which === 13) {
		//grabbing the text typed
		var todoText = $(this).val();
		$(this).val("");
		//create a new LI and add to UL
		$("ol").append("<li><span><i class='fa fa-trash'></i></span> " + todoText +"</li>")
	}
});

$(".fa-plus").click(function(){
	$("input[type='text'").fadeToggle();
});
h1 {
	background: #2980b9;
	color: white;
	margin: 0;
	padding: 10px 15px;
	text-transform: uppercase;
	font-size: 24px;
	font-weight: normal;

}

iframe {
	float: left;
}

ol {
	/* THE BULLET POINTS
	list-style: none;
	*/
	margin: 0;
	padding: 0;
	font-size: 18px;

}

body {

 background-color: rgb(13, 168, 108);

}

li {
	background: #fff;
	height: 30px;
	line-height: 30px;
	color: #666;
}

li:nth-child(2n){
	background: #d3d3d3;
}

span {

	height: 30px;
	width: 0px;
	margin-right: 20px;
	text-align: center;
	color:white;
	display: inline-block;
	transition: 0.2s linear;
	opacity:0;
	background: #e74c3c
	

}

li:hover span {
	width: 30px;
	opacity: 1.0;
}

input {
	font-size: 18px;
	width: 100%;
	padding: 13px 13px 13px 20px;
	box-sizing: border-box;
	border: 3px solid rgba(0,0,0,0);
	color: #2980b9;
	background-color: #e4e4e4;

}

input:focus {
	background: white;
	border: 3px solid green;

	/*OUTLINE OF INPUT BOX
	outlin: none; */
}

.fa-plus {
	float: right;
}


#container {
	
	width: 360px;
	margin: 60px auto;
	background: #d3d3d3;
	box-shadow: 0 0 3px rgba(0,0,0,0.1);


}

.completed {
	color: red;
	text-decoration: line-through;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
	<title>ToDo List</title>
	<link rel="stylesheet" type="text/css" href="utd.css">
	<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
	<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">

	<script type="text/javascript" src="jquery-3.2.1.min.js"></script>
	<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
	 <script>
  $( function() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).disableSelection();
  } );

  </script>

</head>
<body>


	<div id="container">
		<h1>To-do List <i class="fa fa-plus"></i></h1>
		
		<input type="text" placeholder="Add a To-Do" id="task">

		<ol id="sortable">
			<li><span><i class="fa fa-trash"></i></span> EXAMPLE</li>
			
		</ol>
	</div>

	

<script type="text/javascript" src="Utd.js"></script>
</body>
</html>

答案 1 :(得分:0)

节日快乐!

您的编码愿望已获批准。这是给你的礼物,你必须成为一个好人并发布更好的例子,并记住人们不在这里为你编写代码。

你的例子中缺少很多东西。

  1. 将项目添加到列表中
    • 将项目添加到列表时更新本地存储
  2. 允许对列表进行排序
    • 更新列表时更新本地存储
  3. 允许将任务项标记为已完成
    • 项目完成后更新本地存储
  4. 允许删除任务项
    • 删除任务时更新本地存储
  5. 加载本地存储的任务
  6. 我认为这涵盖了您希望此脚本执行的所有操作。现在变得越来越清楚了吗?

    工作示例:https://jsfiddle.net/Twisty/ae6oLr47/12/

    <强> HTML

    <iframe src="https://free.timeanddate.com/clock/i5zr5d5i/n1991/szw110/szh110/hoc09f/hbw0/hfc09f/cf100/hnce1ead6/fas30/fdi66/mqc000/mql15/mqw4/mqd98/mhc000/mhl15/mhw4/mhd98/mmc000/mml10/mmw1/mmd98/hhc00f/hhs2/hmcf00/hms2/hsv0" frameborder="0" width="110"
    height="110"></iframe>
    <div id="container">
      <h1>To-do List <i class="fa fa-plus"></i></h1>
      <form id="task-list">
        <input type="text" placeholder="Add a To-Do" id="task">
        <button type="submit"></button>
      </form>
      <ol id="sortable">
        <li id="task-EXAMPLE"><span><i class="fa fa-trash"></i></span>
          <label>EXAMPLE</label>
        </li>
      </ol>
    </div>
    

    第一次加载时,将没有存储空间,因此我们可以从HTML中读取示例。正如您将看到的,一旦您进行更新,情况将不再如此。

    问:为何选择<button>

    答: <form>喜欢提交按钮。它不会需要它,但它会以我不想讨论的方式提供很多帮助。

    <强>的JavaScript

    $(function() {
      $("#sortable").on("click", function(event) {
        console.log(event.target);
        var $thatItem = $(event.target).parents("li");
        switch (event.target.nodeName) {
          case "SPAN":
          case "I":
            $thatItem.fadeOut(500, function() {
              $thatItem.remove();
              $("#sortable").sortable("refresh");
            });
            break;
          case "LABEL":
            $thatItem.toggleClass("completed");
            break;
        }
        setTimeout(function() {
          updateLocalStorage($("#sortable"));
        }, 500);
        event.stopPropagation();
      });
    
      $("#task-list").submit(function(event) {
        event.preventDefault();
        // Grabbing the text typed
        var todoText = $("#task").val();
        addListItem($("#sortable"), todoText, false);
        // Clear the text field
        $("#task").val("");
        updateLocalStorage($("#sortable"));
      });
    
      $(".fa-plus").click(function() {
        $("#task-list").fadeToggle();
      });
      $("#sortable").sortable({
        update: function(e, ui) {
          updateLocalStorage($(this));
        }
      }).disableSelection();
    
      function addListItem($t, s, c) {
        //create a new LI
        var $li = $("<li>", {
          id: "task-" + s.replace(" ", "_")
        });
        if (c) {
          $li.addClass("completed");
        }
        var $wrap = $("<span>").appendTo($li);
        $wrap.append($("<i>", {
          class: "fa fa-trash"
        }));
        $li.append($("<label>").html(s));
        $li.appendTo($t);
        $t.sortable("refresh");
      }
    
      function updateLocalStorage($list) {
        var tasks = {};
        $list.find("li").each(function(ind, elem) {
          var task = $(elem).text().trim();
          var completed = $(elem).hasClass("completed");
          tasks[task] = completed;
          if (typeof(Storage) !== "undefined") {
            localStorage.setItem("tasks", JSON.stringify(tasks));
          }
        });
      }
    
      if (typeof(Storage) !== "undefined") {
        // Code for localStorage/sessionStorage.
        if (localStorage.getItem("tasks") !== "undefined") {
          var localTasks = JSON.parse(localStorage.getItem("tasks"));
          // Grab stored tasks
          $("#sortable").find("li").remove();
          $.each(localTasks, function(task, status) {
            addListItem($("#sortable"), task, status);
          });
        }
      } else {
        // Sorry! No Web Storage support..
      }
    });
    

    您可能会发现此处的原始代码很少。有很多地方可以改进代码。我将简要讨论一下。

    点击活动

    <小时/> 由于我们基本上是在同一个父级上侦听点击事件,但是在单击特定元素时想要做不同的事情,这些事件将动态创建,我们可以使用点击事件中的event.target。如果是点击的spani,我们会做一件事,如果它是label,则是另一件事。

    setTimeout只是一种在从切换到更新的操作中产生延迟的方法。否则更新将几乎在交换机上执行,并且不会看到对列表的更改,此记录没有变化。

    提交活动

    <小时/> 当你点击 Enter 返回时,你实际上是在提交表格。添加提交按钮的部分原因。为什么不使用提交事件对我们有利,而不是抓住按键并试图阻止这一点。此方法将有助于移动浏览器等。

    可排序的更新事件

    <小时/> 对列表进行排序和更新后,我们需要在本地存储中更新该顺序。现在是时候这样做了。

    功能

    <小时/> 我认为这些非常清楚。你有一个重复多次的操作,写一个函数。

    获取物品

    <小时/> 当页面准备就绪时,最后一位代码将加载。它会检查localStorage并检查是否存储了tasks。然后它会用它们填充列表。

    问: JSON.stringify()的内容是什么?

    A:是的,你可以在本地存储东西......只能作为字符串。这将创建我们的对象的字符串版本以供存储。

    如果您有其他问题,请评论。

答案 2 :(得分:0)

在浏览器中进行编辑后,只需将页面另存为HTML即可使用不同的文件名。您选择的值将被保存。