jQuery的原生js实现---on方法
来源:互联网 发布:淘宝直营店是什么意思 编辑:程序博客网 时间:2024/06/05 01:08
国庆节来了,心情不错,但学习还得继续,今天特意对jQuery的on事件绑定做一个笔记。
<div class="aon"> <sapn class="aspan">1</sapn> <sapn class="aspan">2</sapn> </div> <div class="aon"> <sapn class="aspan">3</sapn> <sapn class="aspan">4</sapn> </div> <div class="aon"> <sapn class="aspan">5</sapn> <sapn class="aspan">6</sapn> </div> <div class="aon"> <sapn class="aspan">7</sapn> <sapn class="aspan">8</sapn> </div>
//原生js简单实现jQuery---on方法//IE9以下支持attachEvent,其中也包括低版本欧朋等。谷歌等webkit内核的支持addEventListener//思路,可以修改Element原型链,添加一个on方法//也可以自己添加类方法//由于时间关系,使用网上流行的修改Element原型链,实现on事件绑定部分功能Element.prototype.on = function(type,fn){ window.addEventListener ? this.addEventListener(type,fn) : this.attachEvent('on' + type,fn);}document.querySelector('.aon').on('click',function(){ alert(this.innerHTML);});
是不是觉得可以兼容IE9以下浏览器?大家可以测试,答案是不行。IE7并不能识别Element元素,然后这个做法局限性非常大,他只能绑定一种事件,无法同时为一个元素绑定多个事件。例如jQuery 的 on('aa bb cc',function(){}) 。
想要多种事件同事绑定,常规做法大家应该知道,循环遍历咯
Element.prototype.on = function(type,fn){ type = type.split(' '); for(let i=0; i <type.length; i++){ window.addEventListener ? this.addEventListener(type[i],fn) : this.attachEvent('on' + type[i],fn); }}document.querySelector('.aon').on('click mouseover',function(){ alert(this.innerHTML);});
我比较任何网上某些网友说的,实现简单的on绑定,多种事件简单处理都是旁枝细节。jQuery真正核心是手工模拟了事件的循环队列,只能好好学习天天向上。
为了更好的兼容,但IE并不认识Element,怎么办?手动获取DOM元素,并绑定on方法,就像jQuery是一个类那样。
class aQuery { constructor(selector){ this.doc = document; this.selector = this.doc.querySelectorAll(selector); } each(){ for(let i=0;i<this.selector.length;i++){ if(arguments[0].call(this.selector,i,this.selector[i])===false){ break; } } return this; } on(type,fn){ let _this = this; type = type.split(' '); this.each(function(i,v){ window.addEventListener ? _this.selector[i].addEventListener(type[i],fn) : _this.selector[i].attachEvent('on' + type[index],fn); }); return this; }}new aQuery('.aon').on('click mouseover',function(){ alert(this.innerHTML);});
好吧,我跑偏了,使用es6的类,不过实现了jQuery的dom简单获取,链式调用each方法和on事件绑定,on可以同事绑定多个事件,只是简单的绑定。
阅读全文
0 0
- jQuery的原生js实现---on方法
- JS原生方法实现jQuery的ready()
- 原生js实现jQuery的ready方法
- JS原生方法实现jQuery的ready()
- 【JS】如何用原生JS实现jQuery的ready方法
- JS原生方法实现JQuery ready()方法
- 原生js实现jQuery常用方法的封装
- jQuery原生js实现---ready方法
- 原生js和jQuery的AJAX实现
- [TOP]原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别
- js原生实现jquery方法offset()和position()
- jQuery方法原生js实现 --- siblings兄弟节点
- 原生js实现双色球的方法
- 原生JS实现的AJAX方法、JSONP
- 原生js实现jq的$.each()方法
- 原生JS实现判断碰撞的方法
- 习惯了使用jQuery的ajax方法,看看原生js使用xmlhttpRequest实现ajax请求
- jQuery原生js实现---trim
- 57、java集合-Iterator
- Mac OS安装Docker
- 动态规划的定义和举例理解
- 在eclipse中进行Struts2项目的配置
- 用scikit-learn的三种词袋(BoW)生成方法为机器学习任务准备文本数据
- jQuery的原生js实现---on方法
- redis安装环境
- 闲来无事学习小项目
- HDU-6165-FFF at Valentine
- 矩阵模板
- Android 消息处理机制(Looper、Handler、MessageQueue,Message)
- jsp统计网站访问人数
- 求柱状图最大面积
- 新的征途