中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jQuery模仿ToDoList實現簡單的待辦事項列表

發布時間:2020-09-21 08:27:43 來源:腳本之家 閱讀:196 作者:By admin 欄目:web開發

功能:在文本框中輸入待辦事項按下回車后,事項會出現在未完成列表中;點擊未完成事項前邊的復選框后,該事項會出現在已完成列表中,反之亦然;點擊刪除按鈕會刪除該事項。待辦事項的數據是保存到本地存儲的(localStorage),就算關閉頁面再打開,數據還是存在的(前提是要用相同瀏覽器)。

ToDoList鏈接: ToDoList—最簡單的待辦事項列表

先把css樣式以及js文件引入進來,jQuery文件要寫在你自己的js文件上邊

<link rel="stylesheet" href="css/index.css" rel="external nofollow" >
<script src="js/jquery.min.js"></script>
<script src="js/todolist.js"></script>

HTML代碼:

<body>
  <header>
    <section>
      <label for="title">ToDoList</label>
      <input type="text" id="title" name="title" placeholder="添加ToDo" required="required" autocomplete="off" />
    </section>
  </header>
  <section>
    <h3>正在進行 <span id="todocount"></span></h3>
    <ol id="todolist" class="demo-box">
    </ol>
    <h3>已經完成 <span id="donecount"></span></h3>
    <ul id="donelist">
    </ul>
  </section>
  <footer>
    Copyright © 2019 
  </footer>
</body>

body {
 margin: 0;
 padding: 0;
 font-size: 16px;
 background: #CDCDCD;
}
header {
 height: 50px;
background: #333;
background: rgba(47, 47, 47, 0.98);
}
section {
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
}
input:focus {
outline-width: 0
}
h3 {
position: relative;
}
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;
}
ol,
ul {
padding: 0;
list-style: none;
}
li input {
position: absolute;
top: 2px;
left: 10px;
width: 22px;
height: 22px;
cursor: pointer;
}
p {
margin: 0;
}
li p input {
top: 3px;
left: 40px;
width: 70%;
height: 20px;
line-height: 14px;
text-indent: 5px;
font-size: 14px;
}
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);
}
ol li {
cursor: move;
}
ul li {
border-left: 5px solid #999;
opacity: 0.5;
}
li a {
position: absolute;
top: 2px;
right: 5px;
display: inline-block;
width: 14px;
height: 12px;
border-radius: 14px;
border: 6px double #FFF;
background: #CCC;
line-height: 14px;
text-align: center;
color: #FFF;
font-weight: bold;
font-size: 14px;
cursor: pointer;
}
footer {
color: #666;
font-size: 14px;
text-align: center;
}
footer a {
color: #666;
text-decoration: none;
color: #999;
}
@media screen and (max-device-width: 620px) {
section {
  width: 96%;
  padding: 0 2%;
}
}
@media screen and (min-width: 620px) {
section {
  width: 600px;
  padding: 0 10px;
}
}

  index.css

接下來開始寫我們自己的js代碼

將多次使用的代碼封裝成函數,方便使用

①獲取本地存儲的數據。如果本地有數據則直接獲取過來,沒有數據的話就返回一個空數組

function getDate() {
  var data = localStorage.getItem("todolist");  // 將獲取到的數據賦給data
  if(data !== null) {   // 如果本地有數據,則返回數據
    return JSON.parse(data); // 本地存儲只能存儲字符串,所以要想獲取里邊的數據就必須將字符串轉換為數組形式返回
  } else { 
    return [];  // 如果本地沒有數據,則返回一個空數組
  }
}

②保存本地存儲數據

function saveDate(data) {
  // 用JSON.stringify()將數組轉化成字符串保存到本地存儲
  localStorage.setItem("todolist", JSON.stringify(data));
}

③渲染頁面 加載數據

先將本地存儲數據獲取過來;將他們遍歷(遍歷之前先將列表清空),看他們是否已經被完成(通過數組里我們自己添加的done的值為true還是false來判斷),如果已經被完成則添加到ul列表,否則添加進ol列表里;同時聲明兩個變量來保存已完成和未完成事項的個數

function load() {
  var data = getDate();  // 先獲取本地存儲數據

  // 遍歷本地存儲數據 將他們添加到列表中
  $("ol, ul").empty();  // 遍歷之前先清空列表
  var doneCount = 0; // 已經完成的個數
  var todoCount = 0; // 正在進行的個數
  $.each(data, function(i, ele) {  // i為索引 ele為遍歷對象
    // 如果復選框被選中(已完成done: true)添加到ul里,未被選中(未完成done: false)添加到ol里
    if(ele.done) {
      $("ul").prepend("<li><input type='checkbox' checked='checked' > <p>" + ele.title + "</p> <a href='javascript:;' index=" + i + "></a></li>");
      doneCount++; // 每添加一個li,已完成數加一
    } else {
      $("ol").prepend("<li><input type='checkbox'> <p>" + ele.title + "</p> <a href='javascript:;' index=" + i + "></a></li>");
      todoCount++;
    }
  })
  $("#donecount").text(doneCount);
  $("#todocount").text(todoCount);
}

1. 用戶輸入待辦事項按下回車,將事項添加進列表

給文本框綁定鍵盤按下事件,通過ASCII值來判斷用戶是否按下了回車(回車的ASCII值為13);

不能直接在本地存儲里更改數據,所以要先獲取數據(數組形式),把數組進行更新數據(把最新數據追加給數組),再保存到本地存儲;

然后對頁面進行重新渲染 更新數據

load();  // 第一步先渲染頁面,不然一開始刷新頁面時列表不顯示
$("#title").on("keydown", function(event) {
  if(event.keyCode === 13) {
    if($(this).val() !== "") {
      var data = getDate();    // 獲取本地存儲數據
      // 把數組進行更新數據,把最新數據追加給數組
      data.push({title: $(this).val(), done: false});
      saveDate(data);   // 保存到本地存儲
      load();       // 渲染加載到頁面
      $(this).val("");
    }
  }
})

2. 刪除待辦事項

先獲取本地存儲數據;

用attr獲取自定義屬性index(索引)得到用戶點擊的第幾個事項,通過索引刪除數組里對應的那組數據;

將更新過的數組保存到本地存儲 再渲染給頁面

$("ol, ul").on("click", "a", function() {
  var data = getDate();  // 獲取本地數據(data是局部變量,不用擔心沖突)
  var index = $(this).attr("index");  // 用attr獲取自定義屬性index,得到索引
  // splice(index, num)刪除數組對象 index為開始刪除的位置,num為刪除幾個
  data.splice(index, 1);
  saveDate(data);
  load();
})

3. 用戶點擊復選框來選擇事項已完成或未完成

獲取本地存儲數據;

通過復選框的兄弟a的index屬性來獲取用戶點擊的事項的索引(index),將第index個數據的done屬性值修改為復選框的值;

將更新過的數組保存到本地存儲 再渲染給頁面

$("ol, ul").on("click", "input", function() {
  var data = getDate();
  // 利用a獲取用戶點擊的第幾個復選框
  var index = $(this).siblings("a").attr("index");
  // 修改數據:data[索引].屬性名 獲取固有屬性用prop
  data[index].done = $(this).prop("checked");
  saveDate(data);
  load();
})

詳細JS代碼:

 $(function() {
 load();  // 先渲染頁面,不然一開始刷新頁面時列表不顯示
 // 1、綁定鍵盤按下事件
 $("#title").on("keydown", function(event) {
   if(event.keyCode === 13) {  // 是否按下了回車 回車的ASCII值為13
     if($(this).val() == "") {
       alert("請輸入事項內容!")
     } else {
       // 不能直接在本地存儲里改數據,所以要先獲取數據,然后改變數組,再保存到本地
       var data = getDate();  // 獲取本地存儲數據
       // 把數組進行更新數據,把最新數據追加給數組
       data.push({title: $(this).val(), done: false});
       saveDate(data);  // 保存到本地存儲
       load();  // 渲染加載到頁面
       $(this).val("");
     }
   }
 })
 //2、刪除待辦事項
 $("ol, ul").on("click", "a", function() {
   var data = getDate();  // 獲取本地數據
   var index = $(this).attr("index"); // 用attr獲取自定義屬性,得到索引
   // splice(index, num)刪除數組對象 index為開始刪除的位置,num為刪除幾個
   data.splice(index, 1);
   saveDate(data);  // 刪除后在把data保存到本地存儲
   load();  // 重新渲染頁面
 })
 //3、正在進行和已完成
 $("ol, ul").on("click", "input", function() {
   var data = getDate();  // 獲取數據
   // 獲取用戶點擊的第幾個按鈕,利用a 
   var index = $(this).siblings("a").attr("index");
   // 修改數據 data[索引].屬性名 獲取固有屬性用prop
   data[index].done = $(this).prop("checked");
   saveDate(data); // 保存到本地存儲
   load();  // 渲染頁面
 })
 // 獲取本地存儲數據
 function getDate() {
   var data = localStorage.getItem("todolist");
   if(data !== null) {   // 如果本地有數據,則返回數據
     return JSON.parse(data); // 本地存儲只能存儲字符串,所以要將字符串轉換為數組形式返回
   } else {    // 如果本地沒有數據,則返回一個空數組
     return [];
   }
 }
 // 保存本地存儲數據
 function saveDate(data) {
   // 用JSON.stringify()將數組轉化成字符串保存到本地存儲
   localStorage.setItem("todolist", JSON.stringify(data));
 }
 // 渲染加載數據
 function load() {
   var data = getDate();  // 先獲取本地存儲數據
   // 遍歷本地存儲數據 將他們添加到列表中
   $("ol, ul").empty();  // 遍歷之前先清空列表
   var doneCount = 0; // 已經完成的個數
   var todoCount = 0; // 正在進行的個數
   $.each(data, function(i, ele) {  // i是索引 ele為遍歷對象
     // 如果復選框被選中(已完成)添加到ul里,沒被選中(未完成)添加到ol里
     if(ele.done) {
       $("ul").prepend("<li><input type='checkbox' checked='checked' > <p>" + ele.title + "</p> <a href='javascript:;' index=" + i + "></a></li>");
       doneCount++;
     } else {
       // 將數據添加進列表里
       $("ol").prepend("<li><input type='checkbox'> <p>" + ele.title + "</p> <a href='javascript:;' index=" + i + "></a></li>");
       todoCount++;
     }
   })
   $("#donecount").text(doneCount);
   $("#todocount").text(todoCount);
 }
})

總結

以上所述是小編給大家介紹的jQuery模仿ToDoList實現簡單的待辦事項列表,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白玉县| 伽师县| 元江| 南郑县| 盐池县| 甘德县| 新源县| 密云县| 威宁| 西充县| 祁门县| 西盟| 余姚市| 宁乡县| 深水埗区| 苍南县| 滁州市| 阳新县| 武汉市| 荥阳市| 屯昌县| 曲麻莱县| 西畴县| 西和县| 华蓥市| 崇仁县| 太和县| 青龙| 枣庄市| 林甸县| 潼关县| 长泰县| 大城县| 荥阳市| 丰原市| 聊城市| 宣威市| 武宁县| 营山县| 兰州市| 沁源县|