Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JQuery分析及实现part5之事件模块功能及实现

JQuery分析及实现part5之事件模块功能及实现

作者头像
ihoey
发布于 2018-10-31 08:34:26
发布于 2018-10-31 08:34:26
63000
代码可运行
举报
文章被收录于专栏:梦魇小栈梦魇小栈
运行总次数:0
代码可运行

JQuery模块分析及其实现第五部分事件部分功能及实现,接第四部分!

remove 方法

  1. 功能:将筛选出来的所有 dom 元素删除掉
  2. 实现思路
    • 遍历 this 上的所有 dom 元素;
    • 获取当前 dom 元素的父节点,调用 removeChild 方法删除自己;
    • 循环结束,返回 this .
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
remove: function() {
    return this.each(function() {
        this.parentNode.removeChild(this);
    });
},

empty 方法

  1. 功能:将筛选出来的所有 dom 元素,清空后代节点
  2. 实现思路
    • 遍历 this 上的所有 dom 元素;
    • 直接给当前 dom 元素的 innerHTML 属性赋值为空字符串;
    • 循环结束,返回 this ,实现链式编程.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
empty: function() {
    return this.each(function() {
        this.innerHTML = '';
    });
}

以上接第四部分 dom 操作模块


事件部分begin

事件绑定

  1. DOM 0方式
    • 通过 dom 元素的 on + 事件名 属性来绑定事件,并且赋值为 一个字符串;
    • 上述字符串为 执行该事件的代码块(逻辑);
    • 缺点:可读性以及可维护性不好.
  2. DOM 0方式的加强版
    • 通过 dom 元素的 on + 事件名 属性来绑定事件,并且赋值为 一个事件处理函数;
    • 缺点:定义很多的全局函数,容易造成内存过大的损耗,依然没有解决 js 代码和 html 的耦合度关系;
  3. IE标准
    • 通过 attachEvent 来绑定事件;
    • 语法: dom.attachEvent(type, callback);
    • 移除事件: detachEvent(type, callback);
      • 注意:如果想要删除某个事件的处理函数,不能将该处理函数定义为匿名的
  4. W3C标准
    • 通过 addEventListener 方法来给dom元素绑定事件;
    • 语法: dom.addEventListener(type, callback, useCapture默认值为false);
    • 移除事件: removEventListener(type, callback);
      • 注意:如果想要删除某个事件的处理函数,不能将该处理函数定义为匿名的
  5. 事件流
    • 概念: 用户在触发某一动作时,页面所做相关反映的过程
    • 三个阶段:
      • 事件捕获阶段
      • 处于事件源阶段
      • 冒泡阶段
    • 事件流种类
      • 捕获型事件流: 事件处理函数是在事件的捕获阶段执行
      • 冒泡型事件流: 事件处理函数是在事件的冒泡阶段执行
  6. attachEvent 和 addEventListener 区别
    • 参数个数不同
    • 事件类型传值不同
      • IE 标准需要加 on 前缀
      • W3C 标准不加 on 前缀
    • 在绑定多个事件处理函数时,IE 在执行事件处理函数时,顺序不定(根据版本),而 W3C按照对垒结构来一次执行事件的处理函数
    • 在事件处理函数内 this 指向不同
      • IE: window
      • W3C: 返回正在执行事件的处理函数的 dom 元素

addEvent 方法

  1. 根据浏览器能力,提前返回事件绑定方法
  2. 如果浏览器符合 W3C 标准,使用 addEventListener 来绑定事件
  3. 否则就使用 attachEvent 来绑定事件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//提前返回
var addEvent = function() {
    // 如果符合W3C标准,使用addEvnetListener绑定事件
    if (global.addEventListener) {
        return function(elem, type, callback, useCapture) {
            elem.addEventListener(type, callback, useCapture || false);
        };
    } else { // 否则就使用IE标准的 attachEvent绑定事件
        return function(elem, type, callback) {
            elem.attachEvent('on' + type, callback);
        };
    }
}();

removeEvent 方法

  1. 根据浏览器能力,提前返回事件移除方法
  2. 如果浏览器符合 W3C 标准,使用 removeEventListener 来移除事件处理函数
  3. 否则就使用 detachEvent 来移除事件处理函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//提前返回
var removeEvent = function() {
    if (global.removeEventListener) {
        return function(elem, type, callback) {
            elem.removeEventListener(type, callback);
        };
    } else {
        return function(elem, type, callback) {
            elem.detachEvent('on' + type, callback);
        };
    }
}();

on 方法

  1. 功能:给 itcast 对象上的所有的 dom 元素绑定事件
  2. 实现思路
    • 遍历 this 上所有 dom 元素
    • 调用 addEvent 给当前遍历到的 dom 元素绑定事件
    • 返回 this ,实现链式编程
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
on: function(type, callback, capture) {
    return this.each(function() {
        addEvent(this, type, callback, capture);
    });
},

off 方法

  1. 功能:移除 itcast 对象上所有 dom 元素的事件处理函数
  2. 实现思路
    • 遍历 this 上所有 dom 元素
    • 调用 removeEvent 给当前遍历到的 dom 元素移除相应事件的处理函数
    • 返回 this ,实现链式编程
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
off: function(type, callback) {
    return this.each(function() {
        removeEvent(this, type, callback);
    });
}

click 方法

  1. 功能: 给 itcast 对象上的所有的 dom 元素绑定单击事件处理函数的
  2. 语法: itcast对象.click(callback);
  3. 实现思路
    • 遍历 this 上的所有 dom 元素
    • 调用 addEventListener 分别传值即可
    • return this 实现链式编程
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
click: function(callback, capture) {
    return this.each(function() {
        addEvent(this, 'click', callback, capture);
    });
}

快捷绑定事件方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
itcast.each(['click', 'dblclick', 'keypress', 'keyup', 'keydown', 'mouseover', 'mouseout',
'mouseenter', 'mouseleave', 'mousemove', 'mouseup', 'mousedown'], function(type) {
    itcast.fn[type] = function(callback, capture) {
        return this.on(type, callback, capture);
    };
});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-232,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一次关于js事件出发机制反常的解决记录
起因:正常情况下我点击s2时是先弹出我是children,再弹出我是father,但是却出现了先弹出我是father,后弹出我是children的情况,这种情况是在和安卓app交互的h5页面中出现的,本地测试没有问题,但是在安卓打包的内嵌h5页面就出现了问题。简单化的代码先展示出来。 html代码如下 <div id="father" class="ss1">s1 <div id="children" class="ss2">s2 </div> </div> 事件绑定如下 $('#fathe
吴裕超
2018/02/28
1.5K0
一次关于js事件出发机制反常的解决记录
JavaScript 事件绑定
事件绑定分为两种:一种是传统事件绑定(内联模型,脚本模型),一种是现代事件绑定(DOM2级模型)。现代事件绑定在传统绑定上提供了更强大更方便的功能。 一.传统事件绑定的问题 传统事件绑定有内联模型和脚本模型,内联模型我们不做讨论,基本很少去用。先来看一下脚本模型,脚本模型将一个函数赋值给一个事件处理函数。 var box = document.getElementById('box');//获取元素 box.onclick = function () {//元素点击触发事件 alert('Lee'); };
汤高
2018/01/11
3.5K0
jQuery 事件绑定 和 JavaScript 原生事件绑定
jQuery 中提供了四种事件监听绑定方式,分别是 bind、live、delegate、on,
Krry
2018/09/10
5.8K0
jQuery 事件绑定 和 JavaScript 原生事件绑定
「面试常问」系统理解浏览器之事件机制
在早期 IE 和 Netscape 团队在开发第四代浏览器的时候,遇到一个问题:当点击一个按钮的时候,是应该先处理父级的事件呢?还是应该先处理按钮的事件呢?IE 和 Netscape 给出了 2 种完全相反的答案,IE 提出事件冒泡的概念,而 Netscape 则支持事件捕获。
用户4456933
2021/06/01
5730
「面试常问」系统理解浏览器之事件机制
事件高级
给元素添加事件,称为注册事件或者绑定事件。 注册事件有两种方式:传统方式和方法监听注册方式
梨涡浅笑
2022/05/08
1.3K0
事件高级
js编程笔记之事件异常
事件处理程序的运行环境 1.ele.onxxx = function (event) {} 程序this指向是dom元素本身 2.obj.addEventListener(type, fn, false); 程序this指向是dom元素本身 3.obj.attachEvent(‘on’ + type, fn); 程序this指向window 封装兼容性的 addEvent(elem, type, handle);方法 复制代码 解除事件处理程序 ele.onclick = false/‘’/null; e
用户10094878
2022/11/21
6980
浅谈JavaScript的事件(事件处理程序)
  事件就是用户或者浏览器自身执行的某种动作。诸如click、load和mouseover,都是事件的名字。而响应某个事件的函数就叫事件处理程序。事件处理程序的名字以“on”开头,比如click事件的事件处理程序是onclick。为事件指定事件处理程序的方式有多种方式。 HTML事件处理程序 元素支持的事件,都可以使用与相应事件处理程序同名的HTML特性来指定。这个特性的值能支持一定的JavaScript代码。例如,在单击按钮的时候执行一些JavaScript代码。 <div id="aa" onclic
水击三千
2018/02/27
1.5K0
在元素上写事件和addEventListener()的区别[通俗易懂]
语法: element.addEventListener( type , listener , useCapture ) – – 添加事件监听 – – type: 事件类型字符串,不使用“on”前缀 – – callback:事件处理程序(回调函数) – – useCapture:可选参数,是否使用事件捕获的方式处理事件。不传递时,默认为false,表示不使用事件捕获(使用事件冒泡),如果需要显示事件捕获,则显示传递true。
全栈程序员站长
2022/09/18
1.3K0
深入理解JavaScript与DOM
DOM(Document Object Model,文档对象模型)是一个通过和JavaScript进行内容交互的API。Javascript和DOM一般经常作为一个整体,因为Javascript通常都是用来进行DOM操作和交互的。
前端达人
2021/04/01
6620
深入理解JavaScript与DOM
事件
利用 on 开头的事件,如 onclick, 同一个元素同一个事件只能设置一个处理函数,出现多个处理函数的话,后面的会覆盖前面的。
赤蓝紫
2023/01/01
1.4K0
事件
JS 事件绑定、事件监听、事件委托详细介绍 转
在JavaScript的学习中,我们经常会遇到JavaScript的事件机制,例如,事件绑定、事件监听、事件委托(事件代理)等。这些名词是什么意思呢,有什么作用呢?
晓歌
2018/08/15
8.9K0
【如果你要学JS <21>】——事件绑定及解除DOM事件流
3.btn.onclick = function( {} 4.特点:注册事件的唯一性 5.同一个元素同一个事件只能设置一个处理函数 ,最 后注册的处理函数将会覆盖前面注册的处理函数
像素人
2024/01/05
3070
【如果你要学JS <21>】——事件绑定及解除DOM事件流
Web前端事件
何雪斌
2017/05/17
3.4K0
Web前端事件
JavaScript笔记(16)之事件高级
eventTarget.addEventListener( type,listener[ , useCapture] )
y191024
2022/09/20
5000
JavaScript笔记(16)之事件高级
事件高级
eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数。
星辰_大海
2020/09/30
1.4K0
事件
事件 JavaScript和HTML的交互是通过事件实现的。JavaScript采用异步事件驱动编程模型,当文档、浏览器、元素或与之相关对象发生特定事情时,浏览器会产生事件。如果JavaScript关注特定类型事件,那么它可以注册当这类事件发生时要调用的句柄。事件是某个行为或者触发,比如点击、鼠标移动..... 当用户点击鼠标时 当网页已加载时 当图像已加载时 当鼠标移动到元素上时 当用户触发按键时... 事件流 事件流描述的是从页面中接收事件的顺序,比如有两个嵌套的div,点击了内层的div,这时候是内层
小胖
2018/06/27
1.4K0
Javascript 的addEventListener()及attachEvent()区别分析
Mozilla中:  addEventListener的使用方式:  target.addEventListener(type, listener, useCapture);  target: 文档节点、document、window 或 XMLHttpRequest。  type: 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。  listener :实现了 EventListener 接口或者是 JavaScript 中的函数。  useCapture
smy
2018/04/03
1.6K0
深入理解事件
javascript 给 DOM 绑定事件处理函数总的来说有2种方式:在 html 文档中绑定、在 js 代码中绑定。下面的方式1、方式2属于在 html 中绑定事件,方式3、方式4和方式5属于在js代码中绑定事件,其中,方式4和5属于事件监听,而方式5是最推荐的做法。
Chor
2019/11/08
8530
DOM事件基本概念大总结(前端必备)
事件流 这一概念源自于对事件触发对象的思考。例如常见的点击事件,鼠标移动事件。这些事件发生之时,往往不只是点击或者移动到某一特定元素上。 比如点击某一个按钮,而它是由上一层的父标签,或许在上一层还有父标签甚至是整个页面。因此点击一个元素可以看成是同时点击了父标签或者整个页面。那么此时事件应该怎么响应到指定标签呢? 事件冒泡 即事件从指定元素开始传播到最外层的元素,并且该事件不仅会在指定元素上发生,还会在传播过过程中的每一个元素上发生。 <html> <body> <div>
努力的Greatiga
2022/07/25
1.9K0
深入理解 DOM 事件机制
本文主要介绍 DOM 事件级别、DOM 事件模型、事件流、事件代理和 Event 对象常见的应用,希望对你们有些帮助和启发!
小生方勤
2019/06/02
2.9K1
相关推荐
一次关于js事件出发机制反常的解决记录
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验