父级标签中,嵌套子级标签,给所有的子级标签添加事件
1, 先获取每一个子级标签,给每一个子级标签,都添加事件
2, 可以给父级标签,添加事件,根据触发事件,不同的 事件对象,执行不同的程序
在动态生成,标签对象时,推荐使用事件委托语法
所谓的动态生成,就是根据数据,渲染生成页面
htmlcssjs
<div>
<span id="span">我是span标签</span>
<p class="p">我是p标签</p>
<h1 name="h1">我是h1标签</h1>
<a href="JavaScript:;">我是a标签</a>
</div>
随便写
// 给父级 div 添加事件
var oDiv = document.querySelector('div');
oDiv.onclick = function(e){
// 兼容事件对象
e = e || window.event;
// 判断 事件对象 是哪个标签,执行不同的操作
// 可以通过标签名称,id,class,属性等等,都可以进行判断
// 根据id属性值判断
if( e.target.id === 'span' ){
console.log( '我是点击span标签,触发的程序' )
}
// 根据class属性值判断
if( e.target.className === 'p' ){
console.log( '我是点击p标签,触发的程序' )
}
// 获取 name 属性的属性值 判断
if( e.target.getAttribute('name') === 'h1' ){
console.log( '我是点击h1标签,触发的程序' )
}
// 获取 href 属性的属性值 判断
if( e.target.getAttribute('href') === 'JavaScript:;' ){
console.log( '我是点击a标签,触发的程序' )
}
}
查询 删除dome
定义一个数组,模拟是数据查询的结果
每一组数据,是一个对象
删除操作:
理论上,应该删除数据库中的数据
我们只是,模拟,删除数组中的数据
删除数组单元,一定要有数组单元的索引
将索引 以 自定义 属性的方式 定义在 button标签中
任何设定在标签中的属性,最终获取的结果,都是字符串类型
如果有需要,要转化为数值类型
htmlcssjs
<table>
<thead>
<tr>
<td>序号</td>
<td>姓名</td>
<td>年龄</td>
<td>身高</td>
<td>体重</td>
<td>删除</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
table{
border-collapse: collapse;
}
td{
width: 100px;
height: 50px;
line-height: 50px;
text-align: center;
font-size: 20px;
border:1px solid #000;
}
var arr = [
{id:1, name:'张老师',age:18,height:180,width:50},
{id:20, name:'霞姐',age:16,height:179,width:49},
{id:31, name:'马老师',age:17,height:180,width:50},
{id:78, name:'刘班长',age:32,height:150,width:85},
{id:109, name:'常同学',age:31.9,height:149,width:84},
];
// 1,根据数组的数据,动态生成table表格
var oTbody = document.querySelector('tbody');
oTbody.innerHTML = setTable(arr);
// 2,通过事件委托的方式,给父级标签添加事件
// 通过判断触发事件的标签,执行不同的操作
// 一般的父级,找,一直存在的,不是动态生成的父级
oTbody.onclick = function(e){
// 兼容事件对象
e = e || window.event;
// 只有点击button时,我们才会执行删除程序
if(e.target.tagName === "BUTTON" ){
// 可以添加一个 确认框,确认在后,再执行删除程序
var bool = window.confirm('您确认要删除这条可爱的数据吗?');
// 如果bool是 false , 取反,结果是 true 执行 return
// 终止不会执行之后的程序
if( !bool ) return;
// 可以通过 getAttribute() 获取标签对象属性的方法
var index = e.target.getAttribute('index');
// 从获取的索引开始,删除1个数组中的单元
arr.splice( index , 1 );
// 需要根究新的数组,重新渲染生成页面
// 此时的arr,是删除了数据之后的arr
oTbody.innerHTML = setTable(arr);
}
}
// 生成table表格,封装成一个函数的形成
// 你给我一个arr数据数组,我返回给你一个table表格的字符串
function setTable(array){
// 定义一个空字符串,存储数据
var str = '';
// 循环遍历数组,生成对应的的字符串
// v就是数据,就是每一个对象
// k就是索引,0,1,2,3,4
array.forEach(function(v,k){
// 每一次,一个对象,对应就是一个 tr 行 以及其中的td单元
str += `
<tr>
<td>${v.id}</td>
<td>${v.name}</td>
<td>${v.age}</td>
<td>${v.height}</td>
<td>${v.width}</td>
<td> <button index="${k}">删除</button> </td>
</tr>
`;
});
// 循环结束,数组中的没一个对象,就对应生成一行tr和td
// 都拼接在str 中,返回值 是 str
return str;
}

Comments | NOTHING