作业1、表格的单行编辑,添加,删除。全部选择和全部删除功能实现。
实例
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>表格操作</title> <style> table,tr,td{ border: 1px solid grey; text-align: center; border-collapse: collapse; } thead{background-color: lightseagreen;} tr td:nth-of-type(2){width: 300px;} tr td:nth-of-type(3){width: 100px;} tr td:nth-of-type(4){width: 100px;} </style> </head> <body> <table id="wrap"> <caption>表格标题</caption> <thead> <tr> <td><input type="checkbox" id="all"></td> <td>产品名称</td> <td>***价格</td> <td>操作方式</td> </tr> </thead> <tbody> <tr> <td><input type="checkbox" name="user-select"></td> <td>mac book pro 15.5</td> <td>19000</td> <td><button name="btn">编辑</button><button name="btnl">删除</button></td> </tr> <tr> <td><input type="checkbox" name="user-select"></td> <td>huawei book pro 全面屏</td> <td>8800</td> <td><button name="btn">编辑</button><button name="btnl">删除</button></td> </tr> <tr> <td><input type="checkbox" name="user-select"></td> <td>小米游戏本pro 15.6</td> <td>8999</td> <td><button name="btn">编辑</button><button name="btnl">删除</button></td> </tr> <tr> <td><input type="checkbox" name="user-select"></td> <td>Thankpad xx**</td> <td>9500</td> <td><button name="btn">编辑</button><button name="btnl">删除</button></td> </tr> </tbody> </table> <button id="del-all" disabled>全部删除</button> <button id="add">添加数据</button> <script> // 获取表格 var table = document.getElementById('wrap'); // 获取全选按钮 var all = document.getElementById('all'); // 获取每行的复选框 var userSelect = document.getElementsByName('user-select'); // 获取全部删除按钮 var delall = document.getElementById('del-all'); // 获取单行删除按钮 var btnl = document.getElementsByName('btnl'); // 获取单行编辑按钮 var btn = document.getElementsByName('btn'); all.addEventListener('input',function () { if (all.checked === true){ // 判断表格内是否有行 如没有 全选复选框不让选 if (userSelect.length === 0){ all.checked = false; } // 第一种执行方式 // Object.keys(userSelect).forEach(function (value) { // console.log(userSelect[value]); // userSelect[value].checked = true; // }); // 第二种执行方式 userSelect.forEach(function (value) { // console.log(value); value.checked = true; }); // 设置全部删除按钮为可点击状态 delall.disabled = false; } else { // 第一种执行方式 // Object.keys(userSelect).forEach(function (value) { // console.log(userSelect[value]); // userSelect[value].checked = false; // }); // 第二种执行方式 userSelect.forEach(function (value) { // console.log(value); value.checked = false; }); // 设置全部删除按钮为禁止状态 delall.disabled = true; } },false); // 全部删除按钮事件 delall.addEventListener('click',function () { table.tBodies[0].innerHTML = null; delall.disabled = true; all.checked = false; },false); // 操作方式 单行操作 删除 Object.keys(btnl).forEach(function (value) { // console.log(value); btnl[value].addEventListener('click',function () { this.parentNode.parentElement.remove(); },false); }); // 操作方式 单行操作 编辑 Object.keys(btn).forEach(function (value) { btn[value].addEventListener('click',function () { var input = prompt('请输入需要修改的内容'); if (input !== null){ if (input.length !== 0){ this.parentNode.parentElement.children[1].innerHTML = input; } } },false); }); add.addEventListener('click',function () { var enda = prompt('请输入产品名称'); var endb = prompt('请输入***价格'); // 判断输入 if (enda == null){ return false; }else if (enda.length === 0){ return false; }else if(endb == null){ return false; }else if (endb.length === 0) { return false; } // 添加元素和内容 var tr = document.createElement('tr'); tr.innerHTML = '<td><input type="checkbox" name="user-select"></td>'; tr.innerHTML +='<td>' + enda + '</td>'; tr.innerHTML +='<td>' + endb + '</td>'; tr.innerHTML +='<td><button name="btn">编辑</button><button name="btnl">删除</button></td>'; table.tBodies[0].appendChild(tr); // 添加后再添加一次操作方式的按钮点击事件 btnl[Object.keys(btnl).length - 1].addEventListener('click',function () { this.parentNode.parentElement.remove(); },false); btn[Object.keys(btn).length - 1].addEventListener('click',function () { var input = prompt('请输入需要修改的内容'); if (input !== null){ if (input.length !== 0){ this.parentNode.parentElement.children[1].innerHTML = input; } } },false); },false); </script> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
作业2、谈一下对单线程,任务队列与事件循环, 同步与异步的理解
单线程只指javaScript的主线程,所有任务都在一条线程上执行。由于只有一条线程执行容易出现堵塞现象。
任务队列是指新建的另外线程,在主线程之外的线程,他不影响主线程的执行。
事件循环是指主线程的任务都执行完成后,任务队列完成的任务会被加载到主线程来执行。
同步是全部在主线程同时执行。
异步是放在任务队列执行。主线程执行完毕后。任务队列里面已完成的任务。会调到主线程来执行。