定义(多种不同的定义)
<ul>
<li>li 1 号</li>
<li>li 2 号</li>
<li>li 3 号</li>
<li>li 4 号</li>
</ul>
<button id="btn">添加</button>
// 通过标签名获取元素
let oUl = document.getElementsByTagName("ul")[0];
let oLi = document.getElementsByTagName("li");
// 遍历元素给每个元素添加点击事件
for (let i = 0; i < oLi.length; i++) {
oLi[i].onclick = function() {
console.log(oLi[i].innerText);
};
};
// 通过 id 获取 按钮元素
let btn = document.getElementById("btn");
// 给按钮添加点击事件
btn.onclick = function() {
// 创建新的 li
let aLi = document.createElement("li");
// 给 li 赋值
aLi.innerHTML = `li ${oLi.length+1} 号`;
// 为新节点单独添加事件
aLi.onclick = function() {
console.log(aLi.innerText);
};
// 把 li 展示到页面上
oUl.appendChild(aLi);
};
总结
从上面的代码可以看到,用 for 循环给相应的 li 添加点击事件,每添加一个就多一次 dom 操作,加上按钮点击总共 5 次。当添加新的 li 元素时,还要给新 li 元素添加点击事件,这无疑有些繁琐,而且 dom 操作的次数没有做优化,显然当页面的 li 元素很多的时候,性能将会受到影响。
<ul>
<li>li 1 号</li>
<li>li 2 号</li>
<li>li 3 号</li>
<li>li 4 号</li>
</ul>
<button id="btn">添加</button>
// 通过标签名获取元素
let oUl = document.getElementsByTagName("ul")[0];
let oLi = document.getElementsByTagName("li");
// 直接给 ul 添加点击事件
oUl.onclick = function(ev) {
// ev 对象的兼容处理
ev = ev || window.event;
// 通过 ev 对象的 target 找到触发事件的元素
// 此操作的作用是:拿到对应的元素
let target = ev.target || ev.srcElement;
// 需求中的操作
// target.nodeName.toLowerCase() 获取元素的操作
// 写法一
if (target.nodeName.toLowerCase() == "li") {
console.log(target.innerText);
};
// 写法二
console.log(target.innerText);
};
// 通过 id 获取 按钮元素
let btn = document.getElementById("btn");
// 为按钮添加点击事件
btn.onclick = function(ev) {
// 新建 li 元素
let aLi = document.createElement("li");
// 给 li 赋值
aLi.innerHTML = `li ${oLi.length+1} 号`;
// 直接将新 li 元素放到 ul 上
oUl.appendChild(aLi);
};
总结
将上面的代码和普通写法进行比对,显然用事件委托的写法更加的简洁,不仅能减少代码量,同时还能减少 dom 操作次数,实现对性能的优化,简直一举多得。
IT之家12月17日消息外媒 Windows Latest 报道,微软 Android 版 Edge 浏览器早在...
现象:使用ajax发送请求,因为后台PHP,使用了阿里的短信,后来返回类型object O...
ajax简介 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),...
文章目录 一、选择排序 二、实例使用选择排序法进行递增排序 本系列文章通过 100...
大家在MySQL中我们可能听到过rowid的概念,但是却很难去测试实践,不可避免会有...
一、禁止指定IP防问网站,并执行相应操作: 复制代码 代码如下: % Dim IP,IPString...
MySQL常见问题及答案汇总,MySQL是一种开放源代码的关系型数据库管理系统。数据...
微软的几种服务和软件产品将于2020年到期,他们将不再获得微软的技术支持,因此...
rss的优点 1.您可以有选择地浏览您感兴趣的以及与您的工作相关的新闻。 2.您可以...
1.在tomcat6.0下jsp出现getOutputStream() has already been called for this re...