动态表格案例

1.表格由专业班级学号1-10号同学的信息组成,包括:学号、姓 名、性别、二级学院、班级、专业、辅导员;

2.表格的奇数行字体为黑色,底色为白色;偶数行字体为白色,底 色为黑色;

3.表格的每一行后有一个删除按钮,点击后会跳出提示弹窗,确认后删除该行的内容,并且删除后上述的颜色规律保持不变:

4.表格的右上方有一个添加按钮,点击后跳出一个表单弹窗,可以填加新的学生的信息。

解:1.设置数组;2.获取元素;

3.(1)创建表格行;(2)渲染<td>;(3)把行添加到tbody里

4.获取删除按钮

5.给a绑定点击事件(1)设置弹窗;(2)删除当前按钮对应的行

6.给button绑定点击事件(1)阻止默认新闻;(2)生成对应数目的输入框;

(3)给新加行添加删除按钮;(4)重新给所有删除按钮绑定事件

<!DOCTYPE html>

<html lang="zh-CN">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

<style>

* {

margin: 0;

padding: 0;

}

.box {

position: relative;

}

table {

/* border: 1px black solid; */

border-spacing: 0;

}

td,th {

border: 1px black solid;

width: 150px;

text-align: center;

}

a {

cursor: pointer;

text-decoration: none;

color: inherit;

}

.box tbody tr:nth-child(2n) {

color: white;

background-color: black;

}

.box tbody tr:nth-child(2n-1) {

background-color: white;

color: black;

}

button {

display: inline-block;

width: 80px;

line-height: 24px;

position: absolute;

left: 1100px;

top: 0px;

}

.box1 {

width: 100%;

height: 30px;

}

.box input{

display: inline-block;

width: 150px;

height: 20px;

border: none;

text-align: center;

font-size: 16px;

background-color: inherit;

color: inherit;

}

</style>

</head>

<body>

<form action="" id="addFrom">

<div class="box">

<div class="box1"></div>

<table>

<thead>

<tr>

<th>学号</th>

<th>姓名</th>

<th>性别</th>

<th>二级学院</th>

<th>班级</th>

<th>专业</th>

<th>辅导员</th>

<th>删除</th>

</tr>

</thead>

<tbody>

</tbody>

</table>

<button>添加</button>

</div>

</form>

<script>

window.onload=function () {

// 设置数组

let content=[

{

num: 1,

name: "灰太狼",

gender: "男",

school: "计算机工程学院",

class: "3",

subject: "计算机科学与技术",

teacher: "xxx"

},

{

num: 2,

name: "红太狼",

gender: "女",

school: "计算机工程学院",

class: "1",

subject: "软件工程",

teacher: "xxx"

},

{

num: 3,

name: "喜羊羊",

gender: "男",

school: "通信工程学院",

class: "5",

subject: "通信工程",

teacher: "xxx"

},

{

num: 4,

name: "美羊羊",

gender: "女",

school: "电气工程学院",

class: "1",

subject: "计算机科学与技术",

teacher: "xxx"

},

{

num: 5,

name: "懒洋洋",

gender: "男",

school: "计算机工程学院",

class: "3",

subject: "计算机科学与技术",

teacher: "xxx"

},

{

num: 6,

name: "灰太狼",

gender: "男",

school: "计算机工程学院",

class: "3",

subject: "计算机科学与技术",

teacher: "xxx"

},

{

num: 7,

name: "红太狼",

gender: "女",

school: "计算机工程学院",

class: "1",

subject: "软件工程",

teacher: "xxx"

},

{

num: 8,

name: "喜羊羊",

gender: "男",

school: "通信工程学院",

class: "5",

subject: "通信工程",

teacher: "xxx"

},

{

num: 9,

name: "美羊羊",

gender: "女",

school: "电气工程学院",

class: "1",

subject: "计算机科学与技术",

teacher: "xxx"

},

{

num: 10,

name: "懒洋洋",

gender: "男",

school: "计算机工程学院",

class: "3",

subject: "计算机科学与技术",

teacher: "xxx"

}

]

// 获取元素

const tbody = document.querySelector('tbody')

const btn = document.querySelector('button')

for (let i = 0; i < content.length; i++) {

// 创建表格行

const tr = document.createElement('tr')

// 渲染<td>

tr.innerHTML = `

<td>${content[i].num}</td>

<td>${content[i].name}</td>

<td>${content[i].gender}</td>

<td>${content[i].school}</td>

<td>${content[i].class}</td>

<td>${content[i].subject}</td>

<td>${content[i].teacher}</td>

<td>

<a href="javascript:" data-id = ${i}>删除</a>

</td>

`

tbody.appendChild(tr) // 把行添加到tbody

}

// 获取删除按钮

const a = document.querySelectorAll('a')

for(let i = 0; i < a.length; i++) {

// 给删除按钮绑定点击事件

a[i].onclick = function() {

alert('您确定要删除吗?')

// 删除当前按钮对应的行:a的父节点是td, td的父节点是tr

tbody.removeChild(this.parentNode.parentNode)

}

}

// 给添加按钮绑定点击事件

btn.onclick = function (e) {

e.preventDefault() // 阻止默认行为(若按钮是表单按钮时有用)

const tr = document.createElement("tr")

tbody.appendChild(tr)

// 生成对应数量的输入框

for (let k in content[1]) {

const td = document.createElement("td")

td.innerHTML = `<input type="text">`

tr.appendChild(td)

}

// 给新加行添加删除按钮

const td = document.createElement("td")

td.innerHTML = `<a herf="#">删除<a>`

tr.appendChild(td)

// 重新给所有删除按钮绑定事件

const a = document.querySelectorAll("a")

for (let i = 0; i < a.length; i++) {

a[i].onclick = function () {

alert('您确定要删除吗?')

tbody.removeChild(this.parentNode.parentNode)

}

}

}

}

</script>

</body>

</html>

第一遍复写

1.删除当前按钮对应的行不会写(209行)

tbody.removeChild(this.parentNode.parentNode)

2.漏写btn点击事件里的创建行和把行添加到tbody里(215,216行)

const tr = document.createElement("tr")

tbody.appendChild(tr)

3.把渲染td写错成渲染tr(225行)

td.innerHTML = `<a herf="#">删除<a>`

相关推荐
爱上妖精的尾巴5 分钟前
8-5 WPS JS宏 match、search、replace、split支持正则表达式的字符串函数
开发语言·前端·javascript·wps·jsa
小温冲冲8 分钟前
通俗且全面精讲单例设计模式
开发语言·javascript·设计模式
意法半导体STM3237 分钟前
【官方原创】FDCAN数据段波特率增加后发送失败的问题分析 LAT1617
javascript·网络·stm32·单片机·嵌入式硬件·安全
为什么不问问神奇的海螺呢丶38 分钟前
n9e categraf redis监控配置
前端·redis·bootstrap
云飞云共享云桌面39 分钟前
推荐一些适合10个SolidWorks设计共享算力的服务器硬件配置
运维·服务器·前端·数据库·人工智能
咔咔一顿操作1 小时前
轻量无依赖!autoviwe 页面自适应组件实战:从安装到源码深度解析
javascript·arcgis·npm·css3·html5
刘联其1 小时前
.net也可以用Electron开发跨平台的桌面程序了
前端·javascript·electron
韩曙亮1 小时前
【jQuery】jQuery 选择器 ④ ( jQuery 筛选方法 | 方法分类场景 - 向下找后代、向上找祖先、同级找兄弟、范围限定查找 )
前端·javascript·jquery·jquery筛选方法
前端 贾公子1 小时前
Node.js 如何处理 ES6 模块
前端·node.js·es6
pas1361 小时前
42-mini-vue 实现 transform 功能
前端·javascript·vue.js