博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js之 matches (可以取代jq的 delegate 方法)
阅读量:6995 次
发布时间:2019-06-27

本文共 2650 字,大约阅读时间需要 8 分钟。

问题:请给#wrap 下面的子元素添加点击事件!

点击代码
不可点击按钮

jq的写法

//jQueryObject.on( events [, selector ] [, data ], handler )
$('#wrap').on('click', 'a.btn', function (e) {
console.log(1111); })

js 写法

document.querySelector('#wrap').addEventListener("click", function (e) {        if (e.target.matches('a.btn')) {            console.log(111);        }    });

由于 'matches'支持情况也不太尽人意

通常在开发阶段兼容IE 8+及移动端,我更偏向于脱离jq等重量级的库。所以有了以下的兼容写法:

function matchesSelector(element, selector){    if(element.matches){        return element.matches(selector);    } else if(element.matchesSelector){        return element.matchesSelector(selector);    } else if(element.webkitMatchesSelector){        return element.webkitMatchesSelector(selector);    } else if(element.msMatchesSelector){        return element.msMatchesSelector(selector);    } else if(element.mozMatchesSelector){        return element.mozMatchesSelector(selector);    } else if(element.oMatchesSelector){        return element.oMatchesSelector(selector);    }}

但主要IE 8正好不支持msMatchesSelector方法,可以用如下方法处理以上函数,以便支持IE 8,完善之后的代码如下:

function matchesSelector(element,selector){    if(element.matches){        return element.matches(selector);    } else if(element.matchesSelector){        return element.matchesSelector(selector);    } else if(element.webkitMatchesSelector){        return element.webkitMatchesSelector(selector);    } else if(element.msMatchesSelector){        return element.msMatchesSelector(selector);    } else if(element.mozMatchesSelector){        return element.mozMatchesSelector(selector);    } else if(element.oMatchesSelector){        return element.oMatchesSelector(selector);    } else if(element.querySelectorAll){        var matches = (element.document || element.ownerDocument).querySelectorAll(selector),            i = 0;         while(matches[i] && matches[i] !== element) i++;        return matches[i] ? true: false;    }    throw new Error('Your browser version is too old,please upgrade your browser');}

 第二部分  替换jquery的 closest

  Closest 获得匹配选择器的第一个祖先元素,从当前元素开始沿 DOM 树向上。

 

//jquery$("selector").closest();//js    function closest(el,selector){        const matchesSelector = el.matches || el.webkitMatchesSelector ||       el.mozMatchesSelector || el.msMatchesSelector;        while (el){            if(matchesSelector.call(el,selector)){                return el;            }else {                el = el.parentElement;            }        }        return null;    }

 

 

本文参考:http://www.lyblog.net/detail/601.html

     https://github.com/oneuijs/You-Dont-Need-jQuery/blob/master/README.zh-CN.md

转载于:https://www.cnblogs.com/WhiteHorseIsNotHorse/p/6213753.html

你可能感兴趣的文章
如何将Linux rm命令删除的文件放入垃圾箱
查看>>
引用MinGW生成的.dll.a后出现的问题
查看>>
51Nod1130斯特林近似
查看>>
dede 调用原图的路径
查看>>
浅析设计模式(四)——建造者模式
查看>>
LeetCode——N-Queens
查看>>
JS中的正则表达式
查看>>
Mysql数据库的基本概念
查看>>
Linux中main是如何执行的
查看>>
Linux,在不使用U盘的情况下使用wubi.exe程序在Win7上安装ubuntu-14.04.3版系统
查看>>
SQLite简单教程
查看>>
网站推广必备的16个营销工具
查看>>
解决sublime text3运行PyQt5代码不能显示窗口的问题
查看>>
csss属性选择器
查看>>
java基础 布局管理器
查看>>
Assetbundle资源单一打包,以及加载方法
查看>>
unity启动第三方软件
查看>>
什么才是程序员的核心竞争力?
查看>>
DOS命令批量重命名文件配合Excel 操作备忘
查看>>
使用Three.js里的各种光源
查看>>