使用事件委托降低重复的事件绑定,从而降低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版]相关推荐

  1. 使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗

    举例:实现点击li打印对应li内的数字 dom结构: <ul><li>1</li><li>2</li><li>3</li& ...

  2. js原生事件委托写法,jquery事件委托写法

    什么是事件委托: 事件委托--给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪个子元素的事件.(不理解冒泡的可以去百度下) 定义: 利用事件冒泡处理动态元素事件绑定的方法,专业术语叫事件委托. ...

  3. .net 事件委托 java_仿net事件委托的java事件模型实现(转csdn)

    作为对比,我们来看看Java Swing的事件处理和委托就要复杂很多:代码如下:(您若还不是很了解Swing事件驱动的话,可以参考我的另外一篇文章:事件驱动模型实例详解(Java篇))://为btnS ...

  4. js hover 触发事件_为什么说JS的DOM操作很耗性能

    想问这样的问题,其实是自己心中没有个谱,一直用 js 计算性能来衡量 浏览器dom 操作性能.js性能和浏览器性能其实是两码事. 这个问题很抽象,它里面涉及挺多个小的知识点. 重申一点,js 操作 D ...

  5. 你真的理解事件绑定、事件冒泡和事件委托吗?

    一文了解Web API中的事件绑定.事件冒泡.事件委托 引言 正文 一.事件绑定 1.事件和事件绑定时什么? 2.事件是如何实现的? 二.事件冒泡 1.事件模型 2.事件模型解析 (1)捕获阶段 (2 ...

  6. vue学习:事件传递(冒泡和捕获),事件委托,jquery中的事件委托,$event 获取元素,vue事件修饰符

    事件传递 ----冒泡和捕获 DOM事件标准定义了两种事件流,这两种事件流分别是捕获和冒泡. 和许多Web技 术一样,在它们成为标准之前,Netscape和微软各自不同地实现了它们.Netscape选 ...

  7. JS 事件代理和事件委托

    目录 事件委托的概念理解 为什么要用事件委托 事件委托的原理: 事件代理(委托)实现 总结: 事件委托的概念理解 为什么叫事件委托?它还有一个名字叫事件代理. JavaScript高级程序设计上讲:事 ...

  8. 详解事件代理(事件委托)以及应用场景

    事件代理(也称事件委托)事件代理,俗地来讲,就是把⼀个元素响应事件 ( click . keydown ......)的函数委托到另⼀个元素 前⾯讲到,事件流的都会经过三个阶段: 捕获阶段 -> ...

  9. JavaScript:事件冒泡和事件委托

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript事件代理和委托(Delegation) JavaScript事件冒泡和事件委托 JavaScript:通过 ...

最新文章

  1. java反射获得注释_Java反射、注解
  2. 【短信插件】短信如何对接74cms_v4.2.66_骑士人才系统
  3. 实践线性模型对于大规模一类别协同过滤
  4. java8 bigdecimal_在java 8中并行使用BigDecimal进行分组和求和
  5. 开发过程中常用的 dos 命令
  6. 使用SDM配置基于IPsec 加密的GRE隧道
  7. 持久层框架JPA与Mybatis该如何选型
  8. 2018 ccpc-wannafly winter camp结营总结(那些年,那些ACM大佬)
  9. kali初学——nmap扫描
  10. 3D游戏案例:滚动天空(超低配版)
  11. tomcat宕机解决方法
  12. Windows 系统封装
  13. wordpress插件选择_如何选择2020年最好的WordPress托管(已比较)
  14. springboot消费kafka Listener method could not be invoked with the incoming message
  15. 如何取消您的Nintendo Switch在线订阅
  16. 名帖73 柳公权 楷书《玄秘塔碑》
  17. CICD系列之k8s
  18. 「建议收藏」第一人称视角带你走进 Vue 源码世界
  19. mysql force作用_mysql force index 用途
  20. 全媒体运营 之 受众分析

热门文章

  1. eclipse+scala+java+maven 整合实践
  2. 说说MaxTenuringThreshold这个参数
  3. Liunx 重新mount
  4. 掌握jQuery插件开发,这篇文章就够了
  5. 雅虎对提升网站性能的最佳实践(英文)
  6. mysql基础命令大全
  7. PHP 做图片锐化处理
  8. error_reporting(“E_ALL”)和ini_set(“display_errors”, “on”)的区别?
  9. Yum出错Error: Cannot find a valid baseurl for repo: addons
  10. OO第四单元博客作业