原生JS及jQuery中事件委托的写法
在绑定节点事件处理程序时遇到的问题:
每个 函数都是对象,都会占用内存;内存中的对象越多,性能就越差。
其次,必须事先指定所有事件处理程 序而导致的 DOM访问次数,会延迟整个页面的交互就绪时间。
采用事件委托的优点:
- document 对象很快就可以访问,而且可以在页面生命周期的任何时点上为它添加事件处理程序 (无需等待 DOMContentLoaded 或 load 事件)。换句话说,只要可单击的元素呈现在页面上, 就可以立即具备适当的功能。
- 在页面中设置事件处理程序所需的时间更少。只添加一个事件处理程序所需的DOM引用更少, 所花的时间也更少。
- 整个页面占用的内存空间更少,能够提升整体性能。
- 绑定事件后,即使目标元素是以后再添加进来的也有效。
适合采用事件委托技术的事件包括click、mousedown、mouseup、keydown、keyup和keypress等。
下面以给每个li 元素绑定click事件为例:
1 <ul class="container">
2 <li class="item">li-1</li>
3 <li class="item">li-2</li>
4 <li class="item">li-3</li>
5 <li class="item">li-4</li>
6 <li class="item">li-5</li>
7 <li class="item">li-6</li>
8 </ul>
原生JS事件委托:
1 var _li = document.getElementsByTagName('li'),
2 _ul = document.getElementsByTagName('ul')[0];
3
4
5 /* 事件委托绑定事件 */
6 _ul.onclick = function (e) {
7 var _it = e.target;
8 if (_it.tagName == 'LI') {
9 // 能进里说明当前点击的是LI元素
10 console.log(_it.innerHTML);
11 }
12 }
jQuery事件委托:
- on()方法
1 /*
2 * .on()方法,jQuery 1.7新增,提供绑定事件处理程序所需的所有功能。帮助从旧的jQuery事件方法转换,see .bind(), .delegate(), 和 .live().
3 * */
4 $('ul').on('click', 'li', function (e) {
5 console.log(e.target.innerHTML);
6 }); - delegate()方法
1 $('ul').delegate('li', 'click', function (e) {
2 console.log(e.target.innerHTML);
3 }); - live()方法
1 /*
2 * 从 jQuery 1.7 开始,不再建议使用 .live() 方法。请使用 .on() 来添加事件处理。使用旧版本的用户,应该优先使用 .delegate() 来替代 .live()。
3 * */
4 $('li').live('click', function (e) {
5 console.log(e.target.innerHTML);
6 });
到此完结。
原生JS及jQuery中事件委托的写法的更多相关文章
- JS与Jquery的事件委托——解决了绑定相同事件的问题
概念: 什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完 ...
- JS与Jquery的事件委托
参考:http://www.ituring.com.cn/article/467 概念: 什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委 ...
- JS与Jquery的事件委托机制
传送:http://www.ituring.com.cn/article/467 概念: 什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委 ...
- 原生 JS 与 jQuery 中的 AJAX
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更 ...
- 原生JS和jQuery中基本的节点操作
js中节点操作**document.createElement()**用来生成网页元素节点,参数为元素的标签名: **document.createTextNode()**用来生成文本节点,参数为所要 ...
- 原生js模拟jquery中的addClass和removeClass方法
js代码: //添加类 function addClass(obj,className) { if(obj.className == '') { //如果没有class obj.className = ...
- js和jquery中有关透明度操作的问题
在日常开发的网站中,常常会用到设置透明度问题,最简单的就是图片的淡入淡出效果.下面我介绍一下在原生js和jQuery中设置透明度的相关问题和注意点: 1 透明度样式设置 透明度在IE浏览器 ...
- js和jquery中的事件委托
[转+自己的修改] 概念: 什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却 ...
- 原生js实现jquery库中部分事件的功能(jquery库封装二)
继续昨天的封装,今天的部分继昨天选择器之后实现了css样式的获取和添加,attr的获取和添加和一部分事件的封装:只是我自己的理解,不妥之处欢迎大家在评论中提出,相互学习,共同提高 /** * Crea ...
- JavaScript中函数和类(以及this的使用<重点>,以及js和jquery讲解,原生js实现jquery)
1.javascript中以函数来表示类: 一般函数是小写开头:function foo() 类开头是大写:function Foo() 实例化类: obj = new Foo() 其他属性就同类是一 ...
随机推荐
- 用简单的代码,将小程序文件直传到腾讯云COS实践
简介 本文介绍如何不依赖 SDK,用简单的代码,在小程序直传文件到腾讯云COS的存储桶. 注意: 本文档内容基于 XML 版本的 API. 前期条件 登录 对象存储控制台 ,创建存储桶,设置 Buck ...
- vue项目中如何使用markdown编辑器插件
1.安装mavon-editor $ npm install mavon-editor --save 需要使用Markdown编辑器的页面js中: import { mavonEditor } fro ...
- maven的安装 仓库的种类和彼此的关系
maven的安装 maven 仓库的种类和彼此的关系 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包, 优先从本地仓库查找 默认本地仓库位置在 ${ ...
- QFramework UI 笔记(后续不断 直到UKitI篇结束)
1.所有的UIElement 传消息给 UIPanel 时,必须先注册 SendEvent(); RegisterEvent(); 2.注意Unity直接生成控件的名称,命名带(1)之类的 ...
- web server 接口调用
1. 生成客户端代码 2.调用接口 import javax.xml.ws.Service;public static NotificationServiceDevImplPortType mokaA ...
- nacos之配置中心使用
发布配置 dataId 数据的key group 组id 获取配置 通过group,dataId获取配置信息 监听配置 Listening-Configs里的值是重点,组成方式 dataId的值%02 ...
- holiday11
holiday11--linux basis From today I will write my note in English ,hope I will stick to it. user and ...
- 20202411 2020-2021-2 《Python程序设计》实验三报告
20202411 2020-2021-2 <Python程序设计>实验三报告 课程:<Python程序设计> 班级: 2024 姓名: 陈书桓 学号:20202411 实验教师 ...
- SOC平台,网络安全管理平台
SOC平台,网络安全管理平台 提供集中.统一.可视化的安全信息管理,通过实时采集各种安全信息,动态进行安全信息关联分析与风险评估,实现安全事件的快速跟踪.定位和应急响应. 从监控.审计.风险和运维四个 ...
- ios MJRefresh 上拉死循环刷新问题+git 图片
网上各种办法都试了,只有这种解决方法解决了我的问题,记录一下 通过延迟 1s后,再来请求接口 - (void)viewDidLoad { [super viewDidLoad]; // Do any ...