检测特定 div 及其所有子级之外的点击

2023-11-23

我一直在阅读以下内容:

https://css-tricks.com/dangers-stopping-event-propagation/

我想以适当且安全的方式实施这一点。

我想当我点击 div 之外的类时containerconsole.log是要触发。每当我点击inside or ondiv 与类container以免其触发。

现在。我可以自己修复这个问题,但是感觉可能有一个聪明的解决方案能够做到这一点,无论容器 div 内有多少元素,甚至它的嵌套程度如何。

当我点击类中的实际 div 时,下面的代码适用container, but not当我单击容器 div 内的某个元素(即按钮)时。

js:

document.addEventListener('click', function (event.target) {
  if(document.getElementsByClassName('container')[0] !== event.target){    
    console.log('clicking outside the div');
  }
});

html:

<div class="container">
  <div>
    <button>
      I will be clicking here!
    </button>
  <div>
</div>

必须有一个良好的实践方法,以下是最受好评的答案如何检测元素外部的点击?在寻找其他问题的答案时让我感到害怕,我宁愿要求一个正确的答案。

请不要使用 jQuery!


您的方法是正确的,只需要在代码中进行一点点更改。 不仅检查 event.target 是否与 div 相同,还检查 div 是否包含事件目标:

var container = document.getElementsByClassName('container')[0];
document.addEventListener('click', function( event ) {
  if (container !== event.target && !container.contains(event.target)) {    
    console.log('clicking outside the div');
  }
});

如果由于某种原因不支持 HTMLnode.contains() (safari,我正在看着你),您可以使用以下代码片段来检查一个元素是否包含另一个元素:

function childOf( node, ancestor ) {
    var child = node;
    while (child !== null) {
        if (child === ancestor) return true;
        child = child.parentNode;
    }
    return false;   
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测特定 div 及其所有子级之外的点击 的相关文章

随机推荐

  • 如何使用Python读取MS-Word文件中表格的内容?

    如何读取和处理 DOCX 文件中表格的每个单元格的内容 我在 Windows 7 和 PyWin32 上使用 Python 3 2 来访问 MS Word 文档 我是初学者 所以我不知道到达表格单元格的正确方法 到目前为止我刚刚这样做了 i
  • 如何在Android中检查特定设备是否支持4G网络?

    我想检查一下是否特定设备具有对 4G 网络的硬件支持 我将详细说明这个问题 在应用程序中 我们有一个设置页面 用户可以在其中进行选择并允许应用程序仅在选定的网络中运行 例如 用户可以选择该应用程序仅在 WiFi 网络或仅在 3G 网络等中运
  • webapi2 返回不带引号的简单字符串

    简单场景 public IHttpActionResult Get return Ok
  • ClosureCleaner.clean的目的

    Before sc runJob调用dagScheduler runJob 对 rdd 执行的 func 被 清理 为ClosureCleaner clean 为什么 Spark 必须这样做 目的是什么 Ankur Dave 一位 Spar
  • docker-compose + django + redis - 连接到 127.0.0.1:6379 时出现错误 111。连接被拒绝

    我已经看过了这个答案并且不知道如何将其应用于我的问题 所以如果答案存在 我们将不胜感激 我也是 docker 和 docker compose 的菜鸟 我有一个简单的 docker compose yml version 3 service
  • Php 从 C# .NET RIJNDAEL 解密字符串 256

    修复 data base64 decode str replace GET data 无论出于何种原因 Php 将 GET 变量中的 转换为空格 我正在尝试解密正在 C NET 中解密的字符串 代码的结果各不相同 有几次最终字符串的某些部分
  • 为什么我们使用system.out.flush()? [复制]

    这个问题在这里已经有答案了 有人可以解释一下我们为什么要使用system out flush 以更简单的方式 如果有可能丢失数据 请给我提供一个例子 如果您在下面的代码中注释它 则不会发生任何变化 class ReverseApp publ
  • 自动实现 Rust 新类型(具有一个字段的元组结构)的封闭类型的特征

    在 Rust 中 可以创建只有一个字段的元组结构 如下所示 struct Centimeters i32 我想做基本算术Centimeters无需每次通过模式匹配提取它们的 内部 值 也无需实现Add Sub 特征和重载运算符 我想做的是
  • 拦截 WPF 应用程序的每次鼠标点击

    我希望拦截 WPF 应用程序中的每次鼠标单击 似乎使用命令路由机制这应该很容易 但抱歉我没有找到任何东西 我的应用程序实现了多个安全级别 并且如果在 x 分钟内没有人与应用程序交互 单击 则需要自动恢复到最严格的级别 我的计划是添加一个计时
  • 检测设备是用密码锁还是人脸锁的指纹锁保护的?

    我的应用程序包含登录的用户身份验证 包括 pin 图案 指纹解锁 这取决于设备安全性 我正在使用生物识别管理器来检测设备是否支持指纹生物识别管理器并检查设备是否安全使用isDeviceSecure 我需要检测移动设备在哪种模式下受到保护 无
  • Python 3.2 中的暴力破解脚本

    我是编写代码的初学者 我从 Python 开始 因为它看起来最简洁 最容易上手 我目前使用的是 Python 3 2 现在我读了一些关于Python编码的在线书籍等等 我制作了一些小程序 仅此而已 但后来我想制作一个程序 可以暴力破解随机密
  • 获取 UIStackView 子视图的框架

    我在 IB 中创建了一个 UIStackView 其分布设置为 Fill Equally 我希望获取每个子视图的框架 但以下代码始终返回 0 0 0 0 class ViewController UIViewController IBOut
  • 每个浏览器的媒体查询

    我想根据浏览器调整输入字段的大小 我可以为每个浏览器编写媒体查询 以便在单独的浏览器上为输入字段设置单独的宽度 就像对于 mozilla 来说 它在 chrome 上将具有单独的宽度 而 Opera 则将具有单独的宽度 媒体查询 are m
  • 如何使用 kotlin android 更新我的 Recyclerview?

    我有一个显示数据的 Recyclerview 活动 现在我想更新我的RecyclerView一旦获得新数据 现在每次我关闭并重新打开我的应用程序时 都会显示新数据 但我希望它没有关闭更新我的观点 我试过这个 但什么都行不通 fun setu
  • Apache Spark 案例在不同列上具有多个 when 子句

    鉴于以下结构 val df Seq Color Shape Range Size map Tuple1 apply toDF color val df1 df withColumn Success when color lt gt whit
  • elasticsearch禁用词频评分

    我想更改 Elasticsearch 中的评分系统 以摆脱对某个术语多次出现的计数 例如 我想要 德克萨斯州 德克萨斯州 德克萨斯州 and texas 得出相同的分数 我发现这个映射 elasticsearch 说会禁用术语频率计数 但我
  • Django Rest框架序列化器排除深度为2的外键

    我制作了一个 api 它以 json 数据的形式返回一个对象 我正在使用 django rest framework 及其序列化器 使用资源 ModelResource 我排除了一些字段 例如名为 所有者 的属性 其中一个字段本身就是外键
  • 关于 Powershell 中的范围

    我正在学习 Powershell 中的范围并有一些问题 关于 本地范围 据我所知 本地范围始终是当前范围 因此 默认情况下 当我们创建一个项目 没有范围修饰符 时 例如一个变量 在某个范围内 让它是脚本或全局 相应的范围将是脚本 全局 所以
  • 将 NSNumberFormatter 的负数格式从 (xxx.xx) 更改为 -xxx.xx

    我想将我的 NSNumberformatter 从显示带括号的负数更改为将减号放在前面 或任何本地化标准 我假设我可以使用 setNegativeFormat 来做到这一点 但读了苹果如此详尽的文档 我还是摸不着头脑 设置负数格式 设置接收
  • 检测特定 div 及其所有子级之外的点击

    我一直在阅读以下内容 https css tricks com dangers stopping event propagation 我想以适当且安全的方式实施这一点 我想当我点击 div 之外的类时container那console lo