iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

30天CSS、JS、React打造專案零組件系列 第 12

DAY12 - [JS] 延伸ToDoList - 完成、未完成分類

  • 分享至 

  • xImage
  •  

今日文章目錄

  • 需求說明
  • 事前準備
  • 參考資料

需求說明

Q: 有哪些需求?

  1. 紀錄分類:全部、已完成、未完成
  2. 顯示方式:做頁籤切換
  3. 顯示 已完成、未完成 數量

事前準備

  • 待辦表單:
    <form action="submit" id="toDoForm">
      <input id="inputValue" placeholder="請輸入待辦事項..."/>
      <button type="submit" class="addBtn">ADD TO LIST</button>
    </form>
  • 頁籤內容準備好三個ul : 全部、完成、未完成
<div class="contentGroup">
  <div class="content content1">
    <div class="detail">
        <h2 class="subTitle">待完成任務:0,已完成任務:0</h2>
        <ol class="toDoList">

        </ol>
    </div>
  </div>
  <div class="content content2">
    <div class="detail">
      <h2 class="subTitle">待完成任務:0</h2>
      <ol class="unfinishToDoList">

      </ol>
    </div>
  </div>
  <div class="content content3">
    <div class="detail">
      <h2 class="subTitle">已完成任務:0</h2>
      <ol class="finishedToDoList">

      </ol>
    </div>
  </div>
</div>

重點說明

  • submit : submit 監聽事件會在form element送出時觸發。單純使用inputbutton無效。

  • submit的默認行動是傳送表單內容至伺服器。以目前練習項目來說不需要,故在執行新增前,需停止默認行動

        event.preventDefault(); // 停止默認行動,但不會影響事件的傳遞。
    
  • cloneNode(boolean) : 複製節點,預設boolean為false,進行淺拷貝(第一層);當boolean為true,進行深拷貝(所有子層)。
    cloneNode(boolean)

  • innerHTML : 替換指定節點內容,原本節點內的內容不會保留,會整個被覆蓋。(如果要保留原本內容,可以使用insertAdjacentHTML(position, text)

  • textContent : 替換指定text node內容,原本text node內的內容不會保留,會整個被覆蓋。

  • previousElementSibling : 選取指定節點的前一個同層節點

  • hasChildNodes() : 回傳布林值。指定節點內,是否有子節點。

  • 目前 codepen 練習:https://codepen.io/chen-chens/pen/NWgjVez?editors=0010

  • 顯示效果:
    顯示效果


遇到的問題

  1. 遇到問題1(已解決) :
    當我同時將新增的li分別append到 全部分類ul 與 未完成分類ul 時,只有最後一個append有效果。
  • 推測原因 :
    因為我只有新增一個li,所以只能帶入一個ul,不能同時給多個ul
    問題1-1
    問題1-2
  • 解決方法 : 將新增li的動作另外包成function,並在個別ulappend時呼叫function。
    (每一次呼叫都是建立新li)
  1. 遇到問題2(待解決) :
    未完成、已完成清單,在重複點擊deleteBtn後,要如何更新三個清單的內容?
  • 目前寫法是:
    1. 先拿到全部的資料
    2. 依全部資料篩選 未完成、已完成資料
    3. 將篩選資料append到對應清單
    4. deleteBtn加入監聽
    5. 在監聽的執行動作加入 步驟2.更新篩選資料 (好像哪裡怪的...?)
  • 解決方法 : 還沒想到

參考資料


明日預告:


上一篇
DAY11 - [JS] 經典的ToDoList
下一篇
DAY13 - [JS] 重新改寫ToDoList
系列文
30天CSS、JS、React打造專案零組件30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言