
说明:本文章提供相应源码,需要到主页资源栏下载,并搭配源码看本文档;重点阐述每个JS模块实现过程中的重难点问题。
一:录入模块
1 渲染数据思路
减少DOM相关操作,避免因过多的DOM操作造成程序运行速度的减慢;案例重点:将数据以对象的形式存放于数组中;并通过数组遍历方式,渲染相关数据,从而提高整个程序运行效率。
// 2 创建对象,获取表单元素的值,将其存储对象中
      const obj = {
        stuId: arr.length + 1,
        uname: uname.value,
        age: age.value,
        gender: gender.value,
        salary: salary.value,
        city: city.value
      }
// 3 并将对象push到数组中
arr.push(obj)对象属性属性值的获取:获取表单元素值利用 (表单.value方式获取)
2 渲染数据步骤(重点)
function render() {
      //每次渲染前,将之前的数据进行清空
      tbody.innerHTML = ''
      for (let index = 0; index < arr.length; index++) {
        // const element = array[index];
        // 生成标签,将标签追加到父级元素中
        const tr = document.createElement('tr')
        tr.innerHTML = `
          <tr>
              <td>${arr[index].stuId}</td>
              <td>${arr[index].uname}</td>
              <td>${arr[index].age}</td>
              <td>${arr[index].gender}</td>
              <td>${arr[index].salary}</td>
              <td>${arr[index].city}</td>
              <td>
                <a href="javascript:" data-id = ${index}>删除</a>
              </td>
          </tr> 
      `
        tbody.appendChild(tr)//追加元素
      }
    }- 创建标签:document.creatElement
- 解析结构:标签.innerHTML、模板字符串,解析要渲染的结构
- 追加元素:将解析完成的结构,追加到相应容器中;在页面显示
二:删除模块
JS代码
// 二:删除模块,利用事件委托
    tbody.addEventListener('click', function (e) {
      if (e.target.tagName === 'A') {
        // console.log(e.target.dataset.id);
        arr.splice(e.target.dataset.id, 1)
      }
      render()
})1 实现删除效果
案例难点是点击删除链接,如何在数组中找到该项记录并实现删除效果
利用:自定义属性方式
tr.innerHTML = `
 <tr>
    <td>
      <a href="javascript:" data-id = ${index}>删除</a>
    </td>
 </tr> `每利用for循环渲染一条数据,就将数据中添加一个id序号;利用事件对象,e.target.dataset.id找到标号,利用数组方法splice()删除,找到数据并删除
三:完成非空判断
// 三:完成非空判断
      for (let index = 0; index < items.length; index++) {
        // const element = array[index];
        if (items[index].value === '') {
          this.reset()
          return alert('输入内容不能为空')
        }
      }1 代码位置问题
非空判断指如果表单元素中有空,则不能添加数据;同时,由于html页面是从上往下依次解析的,因此将非空判断放置在数据对象创建前,避免内存的浪费;
2 return关键字
return关键字:结束当前循环



















