当前位置: 首页 > news >正文

#宝哥教你#查看jquery绑定的事件函数

原文出处:http://sudodev.cn/detect-jquery-event-function-define/


作为技术狂热分子的职业本能,看到一个技术产品的功能,总会忍不住想知道它是怎么被实现的。比如我每每看到别人网站一个很炫的界面或者很酷的功能,就忍不住打开了浏览器的控制台。。。

好,不扯远,说说当你想看到网站上某个元素绑定的事件函数的代码时应该怎么做吧。

查看原生绑定的事件函数代码

所谓原生就是通过addEventListener方法绑定到dom元素上。这个好办:

  • 审查绑定事件的元素(对着它右键->审查元素)
  • 在弹出的Elements视图的控制台,右侧点击“Event Listeners”页签

然后就能看到所有绑定在该元素的事件了,点开后,找到handler,右击鼠标,选择“Show Function Definition”菜单。

就能跳到绑定到该元素的事件函数的源码位置了。有图有真相:

detect

查看jquery绑定的事件函数代码

嗯,我知道,你遇到问题了吧,所有jquery绑定的事件函数,你通过上面的方式,跳到的都是jquery的代码,而且永远是那一个地方。

看了跟没看一样。所以,宝哥在这里教你针对jquery的查看方式。

  • 还是审查元素
  • 点击“Properties”视图。选择第一个,展开
  • 找到一个‘jQueryxxxxx(一串数字)’这样的属性,记住它的值(一般是一个数字)NjqDetect1
  • 然后左侧切到Console视图,在控制台里执行$.cache[N],这里的N是前面那个属性值jqDetect2
  • 然后就会出来绑定在这个元素上的东西了。展开events,里面就有你想要查看的真实函数了。
  • 右击具体事件下的handle后面的function…,然后选择“Show Function Definition”就可以看到了。jqDetect3
  • 例子=》http://demo.sudodev.cn/frontend/jqDetect

查看jquery2.x版本绑定的事件函数代码

好的,我知道,你肯定又遇到问题了。因为当你使用的jquery2.x版本的jquery时,上面的这个方法又不work了,原因是2.x的代码架构变了。其实2.x版本的事件仍然是用的cache机制,但不像1.x版本暴露到外面去了,而是封装起来,并且存在了闭包对象datapriv中,而且一般使用的是jquery的压缩版本,这个datapriv名字你也无法查看到。所以在查看过jquery2.x版本的源码后,宝哥教你如何定位它:

  • 直接进入控制台,构造一个包含jQuery的对象,以便在控制台里查看jQuery。比如输入var o={j:$},这样做的好处是,你执行后能在控制吧里查看jQuery的所有属性jq2Detect
  • 然后在控制台展开jQuery(这里是j)对象,找到_queueHooks这个方法,看到它的代码大概是“return L.get(a,c)||L.access…”这种,记住这个L也可能是不是L)jq2Detect2
  • 展开任意一个j下面首层的对象,比如就是上面的_queueHooks,找到展开,再展开下面的Closure,找到前面的那个“L”对句,对着它后面的字母右键,选择“Store as Global Variable”jq2Detect3
  • 然后控制台里就打出一个tempX的对象,它就那个装着cache的东东。假设它叫temp1。
  • 那个temp1有个get方法可以直接获取它的cache对象。假如你要查看绑定事件的对象的id叫clickMe。那执行temp1.get($('#clickMe').get(0))(或者temp1.get(document.querySelector('#clickMe'))))就会打出跟上面jquery1.x版本相当的东西jq2Detect4
  • 后面就跟上面jquery1.x的方式一样
  • 例子=》http://demo.sudodev.cn/frontend/jq2Detect

另:

以上默认是在chrome浏览器下做的操作,其实在Firefox下也是类似的,相信作为一个技术人员,你应该能举一反三的。至于IE嘛,呃…当我没说哈。:)

更新:

1.为省去查看属性的麻烦,jquery1.x可以直接在控制台执行$.cache[$('#clickMe').get(0)[$.expando]]输出元素上绑定的东西,而不是先去查看元素上jQueryxxxxxxx的属性的值了

2.经过一篇查阅和测试。有一个新的目前最省力而且jquery1,jquery2都适用的办法是,直接在控制台输入$._data($('#clickMe').get(0)),即可把绑定在元素的东西都输出来。但是,从jquery2的源码的注释中发现,$._data会在之后的新版本中废除。所以上面介绍的方法仍然是很有价值的。授人以鱼,不如授人以渔嘛,:)

(转载本站文章请注明出处 开发部落 - sudodev.cn)


相关文章:

  • 在CentOS Issue里显示服务器IP地址
  • SQLServer2005的Output子句获取刚插入的ID值
  • 在群晖 DS213j下安装ipkg,aria2
  • 一篇关于oracle分页查询的好文章
  • 按QQ查询QQ群数据库的方法
  • 哇哈哈, 终于天上掉箱子了
  • WEB常用iptables规则
  • 我常用的Linux设置
  • 免安装Oracle客户端使用PL/SQL连接Linux Oracle 注意事项
  • CLI PHP WebSocket服务器
  • Nginx 自带防盗链模块
  • 在MTK中添加TASK与常用函数分析
  • 大数据时代必不可少的大数据分析和制作工具大全
  • SubVersion服务器Windows安装指南
  • CentOS里ifcfg的device指的是什么?
  • [case10]使用RSQL实现端到端的动态查询
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 10个最佳ES6特性 ES7与ES8的特性
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Android优雅地处理按钮重复点击
  • EOS是什么
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • socket.io+express实现聊天室的思考(三)
  • 阿里云前端周刊 - 第 26 期
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 码农张的Bug人生 - 初来乍到
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 以太坊客户端Geth命令参数详解
  • 正则表达式小结
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​批处理文件中的errorlevel用法
  • (10)STL算法之搜索(二) 二分查找
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (二)换源+apt-get基础配置+搜狗拼音
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (十八)SpringBoot之发送QQ邮件
  • (一)基于IDEA的JAVA基础10
  • (转载)深入super,看Python如何解决钻石继承难题
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core中Emit的使用
  • .net framework profiles /.net framework 配置
  • .net 设置默认首页
  • .NET的数据绑定
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET连接MongoDB数据库实例教程
  • [20150904]exp slow.txt
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [GN] 设计模式——面向对象设计原则概述
  • [IDF]摩斯密码