使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗[兼容IE版]
使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗[兼容IE版]
原理:
W3C将DOM2.0模型中事件处理流程分为三个阶段:
一、事件捕获阶段:
当某个元素触发某个事件(如onclick),顶层对象document就会发出一个事件流,随着DOM树的节点向目标元素节点流去,直到到达事件真正发
生的目标元素。在这个过程中,事件相应的监听函数是不会被触发的。
二、事件目标阶段:
当到达目标元素之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。
三、事件起泡阶段:
事件起泡:从目标元素开始,往顶层元素传播。途中如果有节点绑定了相应的事件处理函数,这些函数都会被一次触发。
IE及Opera(老版本的Opera)下,是不支持事件捕获的()。而这个特点最明显体现在事件绑定函数上。
demo:使用事件委托实现点击li标签打印对应li的innerText,兼容IE
dom结构:
<body><ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>
</body>
JavaScript:
// 兼容IE写法var ulElement = document.getElementsByTagName('ul')[0];if (ulElement.addEventListener) {ulElement.addEventListener('click', function (e) {if (e.target.nodeName.toLowerCase() == 'li') {console.log(e.target.innerText);}}, false)// false 表示在事件第三阶段(冒泡)触发,true表示在事件第一阶段(捕获)触发。} else {// 兼容IE浏览器,需要注意的点有attachEvent, onclick, srcElementulElement.attachEvent('onclick', function (e) {//IE没有e.target,有e.srcElementvar target = e.srcElement;if (target.nodeName.toLowerCase() == 'li') {console.log('IE下---' +target.nodeName.innerText);}})}
扩展:
阻止事件冒泡:e.stopPropagation() ||e.cancelBubble = true(后者适用IE,true为阻止冒泡)
阻止默认事件:e.preventDefault() || e.returnValue = false (后者适用IE,false为阻止默认事件)
使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗[兼容IE版]相关推荐
- 使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗
举例:实现点击li打印对应li内的数字 dom结构: <ul><li>1</li><li>2</li><li>3</li& ...
- js原生事件委托写法,jquery事件委托写法
什么是事件委托: 事件委托--给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪个子元素的事件.(不理解冒泡的可以去百度下) 定义: 利用事件冒泡处理动态元素事件绑定的方法,专业术语叫事件委托. ...
- .net 事件委托 java_仿net事件委托的java事件模型实现(转csdn)
作为对比,我们来看看Java Swing的事件处理和委托就要复杂很多:代码如下:(您若还不是很了解Swing事件驱动的话,可以参考我的另外一篇文章:事件驱动模型实例详解(Java篇))://为btnS ...
- js hover 触发事件_为什么说JS的DOM操作很耗性能
想问这样的问题,其实是自己心中没有个谱,一直用 js 计算性能来衡量 浏览器dom 操作性能.js性能和浏览器性能其实是两码事. 这个问题很抽象,它里面涉及挺多个小的知识点. 重申一点,js 操作 D ...
- 你真的理解事件绑定、事件冒泡和事件委托吗?
一文了解Web API中的事件绑定.事件冒泡.事件委托 引言 正文 一.事件绑定 1.事件和事件绑定时什么? 2.事件是如何实现的? 二.事件冒泡 1.事件模型 2.事件模型解析 (1)捕获阶段 (2 ...
- vue学习:事件传递(冒泡和捕获),事件委托,jquery中的事件委托,$event 获取元素,vue事件修饰符
事件传递 ----冒泡和捕获 DOM事件标准定义了两种事件流,这两种事件流分别是捕获和冒泡. 和许多Web技 术一样,在它们成为标准之前,Netscape和微软各自不同地实现了它们.Netscape选 ...
- JS 事件代理和事件委托
目录 事件委托的概念理解 为什么要用事件委托 事件委托的原理: 事件代理(委托)实现 总结: 事件委托的概念理解 为什么叫事件委托?它还有一个名字叫事件代理. JavaScript高级程序设计上讲:事 ...
- 详解事件代理(事件委托)以及应用场景
事件代理(也称事件委托)事件代理,俗地来讲,就是把⼀个元素响应事件 ( click . keydown ......)的函数委托到另⼀个元素 前⾯讲到,事件流的都会经过三个阶段: 捕获阶段 -> ...
- JavaScript:事件冒泡和事件委托
2019独角兽企业重金招聘Python工程师标准>>> JavaScript事件代理和委托(Delegation) JavaScript事件冒泡和事件委托 JavaScript:通过 ...
最新文章
- java反射获得注释_Java反射、注解
- 【短信插件】短信如何对接74cms_v4.2.66_骑士人才系统
- 实践线性模型对于大规模一类别协同过滤
- java8 bigdecimal_在java 8中并行使用BigDecimal进行分组和求和
- 开发过程中常用的 dos 命令
- 使用SDM配置基于IPsec 加密的GRE隧道
- 持久层框架JPA与Mybatis该如何选型
- 2018 ccpc-wannafly winter camp结营总结(那些年,那些ACM大佬)
- kali初学——nmap扫描
- 3D游戏案例:滚动天空(超低配版)
- tomcat宕机解决方法
- Windows 系统封装
- wordpress插件选择_如何选择2020年最好的WordPress托管(已比较)
- springboot消费kafka Listener method could not be invoked with the incoming message
- 如何取消您的Nintendo Switch在线订阅
- 名帖73 柳公权 楷书《玄秘塔碑》
- CICD系列之k8s
- 「建议收藏」第一人称视角带你走进 Vue 源码世界
- mysql force作用_mysql force index 用途
- 全媒体运营 之 受众分析
热门文章
- eclipse+scala+java+maven 整合实践
- 说说MaxTenuringThreshold这个参数
- Liunx 重新mount
- 掌握jQuery插件开发,这篇文章就够了
- 雅虎对提升网站性能的最佳实践(英文)
- mysql基础命令大全
- PHP 做图片锐化处理
- error_reporting(“E_ALL”)和ini_set(“display_errors”, “on”)的区别?
- Yum出错Error: Cannot find a valid baseurl for repo: addons
- OO第四单元博客作业