黑马TOdolist案例(最新版)


$(function () {
  // 0. 本地获取数据
  const data = JSON.parse(localStorage.getItem('todolist') || '[]')
  
  // 基本写法
  // let data = []
  // if (localStorage.getItem('todolist')) {
  //   data = JSON.parse(localStorage.getItem('todolist'))
  // }
  // 三元写法
  // let data = localStorage.getItem('todolist') ? JSON.parse(localStorage.getItem('todolist')) : []

  // 1. 渲染列表
  function render() {
    // data数据改变, 进行本地储存
    localStorage.setItem('todolist', JSON.stringify(data))
    // 清空列表内容
    $('#todolist, #donelist').empty()
    // 遍历data数据
    $.each(data, function (i, item) {
      // item 数组中的每一个元素 // { title: 1, done: false }
      // 动态生成li标签
      const li = $(`<li><input type="checkbox"> <p>${item.title}</p> <a href="javascript:;" data-index=${i}></a></li>`)
      // 根据done状态, 添加到不同列表中
      if (item.done) {
        // input改变checked属性
        li.children('input').prop('checked', true)
        // 添加到已经完成的列表中
        $('#donelist').prepend(li)
      } else {
        // 添加到正在进行的列表中
        $('#todolist').prepend(li)
      }
    })
    // 两个列表的长度
    $('#todocount').text($('#todolist li').length)
    $('#donecount').text($('#donelist li').length)
  }
  render()

  // 2. 添加todo
  $('#title').keyup(function (e) {
    // 判断按下的是回车键
    if (e.key === 'Enter') {
      // 获取表单值
      const title = $(this).val().trim()
      // 非空校验
      if (!title) return alert('请输入一个非空的值')
      // 添加新对象
      const obj = { title, done: false }
      // data数据中追加obj
      data.push(obj)
      // 重新渲染页面
      render()
      // 清空表单值
      $(this).val('')
    }
  })

  // 3. 删除todo
  $('#todolist, #donelist').on('click', 'a', function () {
    // 为什么不能使用jq提供index()方法 ????
    // const index = $(this).index()

    // 通过自定义属性获取索引
    const index = +$(this).attr('data-index')
    // data数据进行删除
    data.splice(index, 1)
    // 重新渲染页面
    render()
  })


  // 4. 切换两个列表
  $('#todolist, #donelist').on('change', 'input', function () {
    // 获取当前点击的checked属性
    const state = $(this).prop('checked')
    // 如何获取当前的索引
    const i = +$(this).siblings('a').attr('data-index')
    // 改变data中的done属性
    data[i].done = state
    // 重新渲染页面
    render()
  })




})




 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值