js小功能:全选,反选,添加,删除,客户端持久化保存

127 阅读1分钟

js小功能:全选,反选,添加,删除

```<script>
    // json xml
    let data = [
      {
        id: 1,
        title: "",
        checked: false,
        collect: true
      }, {
        id: 2,
        title: "",
        checked: true,
        collect: false
      }, {
        id: 3,
        title: "",
        checked: true,
        collect: true
      }, {
        id: 4,
        title: "",
        checked: false,
        collect: false
      }, {
        id: 5,
        title: "",
        checked: true,
        collect: false //是否收藏 true 收藏 false 没有收藏
      }
    ];
    // 数据优先  视图渲染;
    
    //是否全选
    let isCheckAll = data=>data.every(item=>item.checked); 
    // 三目运算符

    function renderDom(data) {
      let container = document.querySelector("#list");
      container.innerHTML = "";
      // 根据数据生成dom
      data.forEach((item) => {
        let li = document.createElement("li");
        li.innerHTML = `<input type="checkbox" class="check" ${item.checked ? 'checked' : ''} />
        <span>${item.title}</span>
        ${item.collect ? '<a href="javascript:;" class="cancelCollect">取消收藏</a>' : '<a href="javascript:;" class="collect">收藏</a>'}
        <a href="javascript:;" class="remove">删除</a>`;
        container.appendChild(li);
      })
      addEvent();
      document.querySelector("#checkAll").checked = isCheckAll(data);
    }
    renderDom(data);

    function addEvent() {
      let lis = document.querySelectorAll("#list li");
      lis.forEach((li, key) => {
        li.addEventListener("click", e => {
          // console.log(e.target.className);
          // 处理数据
          switch (e.target.className) {
            case 'check':
              // console.log("check",e.target.checked);
              data[key].checked = e.target.checked;
              break;
            case 'cancelCollect':
              //console.log("cancelCollect");
              data[key].collect = false;
              break;
            case 'collect':
              data[key].collect = true;
              break;
            case 'remove':
              data.splice(key, 1);
              break;
            default:
              break;
          }
          // console.log(data);
          renderDom(data);
        })
      })
    }

    //  三目运算符  数据驱动  事件委托 
    // 作业:在老师的代码基础上实现1.全选/全不选 2.添加音乐功能 3 删除指定音乐;
    //全选或者全不选
    document.querySelector("#checkAll").onclick = function(){
      if(localStorage.getItem("data")){
          let myData = JSON.parse(localStorage.getItem("data"));
          myData.forEach(item=>{
            item.checked = this.checked
            
        });
        localStorage.setItem("data",JSON.stringify(myData));
        renderDom(myData);
      };
    }

    //删除
    document.querySelector("#remove").onclick = function(){
      if(localStorage.getItem("data")){
          let myData = JSON.parse(localStorage.getItem("data"));
          let newData = myData.filter(item=>!item.checked);
          localStorage.setItem("data",JSON.stringify(myData));
          renderDom(newData);
      };
    }

    //添加
    document.querySelector("#add").onclick = function(){
      if(localStorage.getItem("data")){
        let value = document.querySelector("#newInfo").value;
        let myData = JSON.parse(localStorage.getItem("data"));
        let obj = {
          id:(myData[myData.length-1].id + 1),
          title:value,
          checked:false,
          collect:false
        };

        myData.push(obj);
        renderDom(myData);
      }
      
    }
  </script>