在纯 Javascript 中使用选择器模拟 jQuery“on”

2024-01-03

我会用纯 Javascript 模拟 jQuery 的主要功能.on( events , selector , data) http://api.jquery.com/on/方法。

例如

$(document).on('click','.button',function() {
   console.log("jquery onclick"); 
});

我认为做这样的事情就足够了

document.addEventListener('click',function(e) {
    if(e.target.className == 'button2') {
         console.log("It works");   
    }
});

但是当我有这个 html 结构时:

<button class="button2">Hello <span>World</span></button>

当点击事件被触发时,我的脚本不起作用span元素,因为e.target is span。 (对于这个问题,我忽略了具有多个类的元素的复杂性和跨浏览器兼容性)

The jQuery 的来源 https://github.com/jquery/jquery/blob/master/src/event.js#L708阅读起来并不简单,我也不明白它是如何工作的(因为第一段代码,在 jQuery 中,适用于我的 html 结构)。

我需要这个方法,因为我的 html 是动态的,并且具有此类的按钮被创建、删除和重新创建很多次。我不想每次都添加听众。

如果可能的话,我会避免包含 jquery 库。

那么,我可以这样做吗?

这里的jsFiddle http://jsfiddle.net/wT4qu/供测试用。


2017 年更新: 当前的 DOM 标准,例如closest https://developer.mozilla.org/en-US/docs/Web/API/Element/closest意味着这现在容易多了。

const addEventForChild = function(parent, eventName, childSelector, cb){      
  parent.addEventListener(eventName, function(event){
    const clickedElement = event.target,
    matchingChild = clickedElement.closest(childSelector)
    if (matchingChild) cb(matchingChild)
  })
};

只需使用它:

addEventForChild(parent, 'click', '.child', function(childElement){
  console.log('Woo click!', childElement)
})

这是一个jsfiddle https://jsfiddle.net/xchfuhpb/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在纯 Javascript 中使用选择器模拟 jQuery“on” 的相关文章

  • 从 HTML 字符串中解析和选择

    使用 ajax 调用 我返回了页面的partialView HTML 但在显示它之前 我希望从主 div 中提取信息 如果我创建一个浮动窗口 该数据只是大小信息 Code div class window details more data
  • 如何打开新选项卡并更改当前页面

  • AJAX 安全问题

    我希望能够解决一些关于 AJAX 安全性的问题 这是我试图理解的一个场景 假设我正在使用 AJAX 向页面请求一些半敏感材料 例如 我将把用户的 ID 传递给一个 php 文件 并返回一些关于他们自己的信息 现在 是什么阻止人们模拟此 Ja
  • 在 Node.js 中生成带条形码的 pdf

    我在用https github com devongovett pdfkit https github com devongovett pdfkit生成 PDF 文件 我可以简单地使用类似的方法 app get get pdf req re
  • JAVASCRIPT - 为什么这个对象没有改变?

    function myFunc theObject theObject make Ford model Focus year 2006 var mycar make Honda model Accord year 1998 var x my
  • 从选择 onChange 调用 javascript 函数 [重复]

    这个问题在这里已经有答案了 所以我有一个简单的 HTML 选择框和一个 javascript 警报功能 我希望选择框有一个 onchange 事件来调用 javascript 警报函数 这是我到目前为止所拥有的 HTML div Type
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • Angular UI 路由器嵌套视图问题

    我在理解 Angular UI Router 嵌套视图的工作原理时遇到了一些问题 我的 stateProvider 看起来像这样 stateProvider state login url login views main template
  • 更新存储在 chrome 扩展本地存储中的对象

    我正在开发一个 chrome 扩展 我将存储服务器发送的对象 例如 我将收到 命令 id 1 类型 A 大小 B 优先级 C 如果我有一个数据库 我会将其作为表中的一行插入commands 使用 chrome storage 我将这些对象的
  • EmberJS:对象作为查询参数来刷新模型

    我遵循了查询参数指南 http guides emberjs com v1 11 0 routing query params http guides emberjs com v1 11 0 routing query params 而且效
  • 正则表达式中连字符的这种用法有效吗?

    NB I only想知道它是否是正则表达式定义中未转义连字符的有效应用 它是not关于匹配电子邮件 连字符或反斜杠的含义 量词或其他任何内容的问题 另外 请注意 链接的答案并没有真正讨论转义 未转义连字符之间的有效性问题 通常我会像这样声明
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • .points 不透明度/大小在三个.js 内

    我回来回答有关 points 的第二个问题 这次想知道如何将不透明度从 0 更改为 1 然后又回到距发射器的特定像素距离内 var particleCount 14 particles new THREE Geometry pMateria
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • jQuery:将文本区域滚动到给定位置

    我有一个包含很多文本的文本区域
  • AngularJS + jQuery 移动

    是否还有其他可能性来设计AngularJS以移动友好的方式应用程序CSS 我正在计划一个移动应用程序 并希望使用 AngularJS 进行逻辑和数据绑定 但我不想自己设计所有内容CSS The AngularJSFAQ说它使用jQuery
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • Google 地图 API - 地图未显示 - 没有错误

    我正在尝试将地图从 Google API 加载到 div 中 但是 地图未加载 并且没有输出任何错误 这是代码 google maps var geocoder map function codeAddress address geocod
  • onPress 方法中箭头函数与普通函数的行为

    正在学习 Native React 并学习更多关于 javascript 的知识 所以我仍然不明白它的行为的很多事情 我使用 TouchableOpacity 及其 onPress 属性创建了一个按钮组件 为了让它工作 我必须发送我想要执行
  • 如何在 TypeScript 中使用 navigation.replace ?

    我试图在我的代码中使用它 const navigation useNavigation navigation replace AllFriends 但我不断收到错误消息 Property replace does not exist on

随机推荐

  • boost::bind 何时将参数强制转换为所需类型?

    当我使用 boost bind 将参数绑定到函数时 它们何时被转换为函数所需的类型 如果可以隐式转换 它们如何存储在bind t对象中 作为最初传递给绑定的类型还是作为函数签名所需的类型 具体来说 如果我有签名的功能 void SomeFu
  • 如何使用 python 发送 AT GSM 命令?

    如何使用 python 发送 AT GSM 命令 我能够使用 Delphi 和一些 comport 组件 TComport 很容易地做到这一点 但是我如何使用 python 与我的调制解调器对话 Gath 我用 pyserial 这样做 i
  • 上传某些文件时$_FILES和$_POST数据为空

    我注意到 根据我上传的视频 有时整个 POST and FILES数组将为空 这是一个奇怪的现象 但我在一些视频中发现了它 为了测试 我使用的视频全部是video mp4文件类型
  • Cross-Origin Read Blocking (CORB) 阻止跨源

    Error 请求的资源上不存在 Access Control Allow Origin 标头 起源 https abcd com https abcd com 因此不允许访问 响应的 HTTP 状态代码为 403 每当我尝试从 Angula
  • 注销时不转到上一页

    我有一个jsp项目 我使用会话来获取用户权限 我用过 session invalidate 在注销页面中 注销后 当我按后退按钮时 它会显示上一页 我不希望它这样做 请在这件事上给予我帮助 您可以将 html 上的缓存设置为在注销确认页面上
  • 从字符串中获取转义的 unicode 代码

    我似乎遇到了与开发界其他人相反的问题 我需要从字符串生成转义字符 例如 假设我有这个词MESSAGE 我需要生成 u004D u0045 u0053 u0053 u0041 u0047 u0045 u003A u0053 u0069 u00
  • 查找 PostgreSQL 中不为 NULL 的列

    我为每个表分配了一个任务来计算可为空的列 简单的 SELECT table name count FROM INFORMATION SCHEMA COLUMNS WHERE is nullable NO GROUP BY table nam
  • 如何使用 SQLAlchemy 声明式创建复合列?

    我经常用Text保存 Markdown 格式的富文本的列 我的模型看起来像这样 class Document Base id Column Integer primary key True title Column Unicode 250
  • gzipped json 与高效二进制序列化的性能

    JSON 和 Gzip 是序列化数据的简单方法 这些在编程语言中广泛实现 而且这种表示形式可以跨系统移植 是吗 我的问题是 与非常高效的二进制序列化方法相比 json gzip 是否足够好 成本低于 2 倍 我正在寻找序列化各种数据时的空间
  • 未使用 v0 的“vperm v0,v0,v0,v17”有何作用?

    我正在研究一个SHA 256 实施 https github com noloader SHA Intrinsics blob master sha256 p8 cxx using Power8 内置 https github com no
  • 如何处理支持/设计库的新底页问题?

    背景 我使用了修改后的版本底页 https www google com design spec components bottom sheets html图书馆 here https github com AndroidDeveloper
  • Doxygen:如何记录 PHP 常量?

    如何记录 PHP 常量 define SOME CONSTANT constant value 与多氧 只需在常量上方包含一个文档块即可define 函数调用或const像这样的关键字
  • Access SQL 查询缺少更多必需参数

    在一个网络项目中 我尝试执行以下查询 SELECT ItemName as Name ItemPicture as Picture ItemHeroModif as Assistance ItemTroopModif as Charisma
  • 检测并防止/延迟Windows移动电源关闭

    我有一个窗口移动应用程序 需要在设备关闭之前检测电源关闭并执行一些操作 我已经能够使用 RequestPowerNotifications win32 api 的 pinvoke 检测到设备正在关闭 但是我不知道如何长时间关闭电源来运行我的
  • 如何将 Windows 网络路径与 Git Bash 结合使用

    网络资源的路径在 Windows 中用 servername share path to folder句法 如何在 Git Bash 中使用这样一个使用 Unix 风格路径的文件夹 其实只是cd servername share path
  • 有没有办法禁用所有这些到包目录的符号链接?

    我按照本指南使用 Dart Eclipse 插件 http blog dartwatch com 2013 01 integrating dart into eclipse and your html http blog dartwatch
  • 在许多不同的数据中重复某个功能

    我正在用 Haskell 编写一个编译器 所以我们有一个lot 或者至少对我来说似乎很多 of datas 和构造函数 如下所示 data DataType Int Float Bool Char Range Type String Wid
  • 分配给列表容器的混乱

    我可能患有大脑衰退 但根据有关项目和列表分配的文档 https docs raku org language variables Item and list assignment https docs raku org language v
  • 跨 C# 和 C++/CLI 对象的垃圾收集

    我目前正在研究使用 C CLI 来弥合托管 C 和本机非托管 C 代码之间的差距 我想要解决的一个特定问题是 C 和 C 中不同数据类型的转换 在阅读这种桥接方法的使用以及所涉及的性能影响时 我想知道垃圾收集将如何工作 具体来说 如果在 另
  • 在纯 Javascript 中使用选择器模拟 jQuery“on”

    我会用纯 Javascript 模拟 jQuery 的主要功能 on events selector data http api jquery com on 方法 例如 document on click button function c