JS:innerHTML 和 DOM 不合作

2023-12-19

我注意到一个有趣的行为,想知道是否有人可以解释其中的原因。

它是这样分解的:

  • 我添加了一个div and a button使用 Javascript 的 `appendChild'。
  • 我添加一个onclick按钮的处理程序,工作正常
  • 我添加分配innerHTML of the div添加更多内容
  • Button onclick完全停止工作

这是一个示例脚本:

var D = document.createElement("DIV"), B = document.createElement("BUTTON");
B.innerHTML = "Is it true?";
document.body.appendChild(D);
D.appendChild(B);

B.onclick = function() { alert("Elvis Lives!"); }

此时,效果很好。然后,添加这一行:...

D.innerHTML += "What about Tupac?"; 

...按钮坏了。所以,我只是使用appendChild现在对于所有元素。

But -

  • 为什么会发生这种情况(“看起来应该有效:)”)
  • 有修复吗(除了附加我所有的额外元素之外)?

(这是很多有根据的猜测)我认为当你修改时D's innerHTML, 内的 domD被销毁并从新值中创建。所以当新的内容被构建出来时,你会得到一个全新的button,它与以下节点不是同一节点B。因为你设置了onclick通过 js 处理程序而不是通过原始元素上的属性,新的button没有该函数参考。然而B仍然有效,可以通过调用来证明

B.click();

附加到之后innerHTML.

防止 dom 内部的抖动D,你可以这样做而不是使用innerHTML:

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

JS:innerHTML 和 DOM 不合作 的相关文章

  • 使用 ReactJS 旋转图像预览

    我正在尝试使用 ReactJS 旋转图像的预览 因此 我首先允许渲染预览的上传功能 然后在用户点击上传之前 我希望他们可以选择根据自己的喜好旋转图像 这是我用来预览图像的 class ImageUpload extends React Co
  • 使用 Passport 进行 Node.js 身份验证:如果字段丢失,如何闪烁消息?

    我正在使用 Passport js 如果我的表单字段为空 我想显示一条消息 但我不知道该怎么做 因为如果缺少护照 则不会触发策略回调 我真的希望这个用例更加清晰 而且我不想修改护照 我感觉有办法 但不知道在哪里 我尝试使用路线的回调 app
  • 使用 JavaScript 查找数组中最接近的日期

    我有一个包含天数的数组 每一天都是一个对象 例如 day year 2012 day month 08 day number 03 day name mon 我还通过使用以下方法向每个日期对象添加了时间戳属性 function conver
  • 如果用户禁用了 javascript,如何回退到完全不同的索引页面?

    我有一个大型 动态生成的单页网站 该网站严重依赖 javascript 我想为没有 javascript 的人提供后备 每个版本必须有不同的 php 代码 所以基本上我需要一个完全不同的索引页面 我不想将所有内容都包装在 javascrip
  • 如何使用 JavaScript 获取光标下的单词?

    如果我有 p some long text p 在我的 HTML 页面上 我如何知道鼠标光标位于 文本 一词上方 我的另一个答案仅适用于 Firefox 这个答案适用于 Chrome 也许在 Firefox 中也能工作 我不知道 funct
  • 为什么 Bootstrap 按钮下拉菜单在 iOS 上不起作用?

    看起来甚至连引导演示在这里 http twitter github com bootstrap components html buttonDropdowns不适用于 iOS 您似乎无法在 iPhone 或 iPad 上从中选择项目 有解决
  • 切换 Ag-Grid 中的浮动过滤器?

    我试图通过开关或按钮单击来确定浮动过滤器的显示 看起来很简单 我应该能够在 true 和 false 之间切换 将该值提供给网格选项中的浮动过滤器 然后刷新标题 对吗 不幸的是 网格似乎总是落后一步 当我第一次点击时 什么也没有发生 当我将
  • Karma Webpack - 错误:找不到模块“./test/utilities.js”

    我正在使用 Karma Webpack 进行项目的单元测试 当我跑步时karma start 我有这个错误 Error Cannot find module test utilities js at myproject test campa
  • 如何让机器人状态显示为“手机在线”

    我看到 NotSoBot 的状态为在线在移动 https i stack imgur com IiF4k png 有没有办法可以在discord js 中做到这一点 我知道这已经很旧了 但更简单的方法是将其添加到定义客户端 机器人的位置 c
  • Puppeteer 登录 Instagram

    我正在尝试使用 Puppeteer 登录 Instagram 但不知何故无法登录 你能帮助我吗 这是我正在使用的链接 https www instagram com accounts login https www instagram co
  • 使用 javascript 和 jQuery UI datepicker 获取工作日数

    我有两个日期选择器 我可以从中计算天数 而无需计算星期六和星期日 但我想在周五和周六这样做 我尝试过一些不同的方法但失败了 对我来说 处理不包括周六和周日的天数很容易 但处理周五和周六的天数则不然 以下是我的 javascript 代码 f
  • Google 闭包编译器使用 WebStorm

    我喜欢用谷歌闭包编译器 https developers google com closure compiler in WebStorm https www jetbrains com webstorm 我已经通过 npm 下载了它 npm
  • 如何拆分字符串,在特定字符处断开?

    我有这个字符串 john smith 123 Street Apt 4 New York NY 12345 使用 JavaScript 将其解析为最快的方法是什么 var name john smith var street 123 Str
  • 纯 JavaScript 工具提示

    我正在尝试用纯 JavaScript 制作一个工具提示 显示在hover 就像 Stack Overflow 中将鼠标悬停在个人资料名称 a 上一样div显示 我尝试使用onmouseover onmouseout并添加了setTimeou
  • up() 和 down() 与 Ext.getCmp()

    我很困惑我需要在 up down 和 Ext getCmp ID 之间使用哪一个作为 grep 对象 对我来说 定义对象的 ID 并通过 Ext getCmp ID 检索对象更容易 而且代码看起来更干净 例如 console log thi
  • Netlify 正在显示我的 Gatsby 网站的 html 版本

    网站建设位于https 5efbc255ca51be00080b5219 epic raman 086510 netlify app https 5efbc255ca51be00080b5219 epic raman 086510 netl
  • 删除移动设备上的 adsense

    我正在研究响应式设计 但在使用 adsense 时遇到了问题 我有一个广告应该显示在桌面设计上 但不能显示在移动设计上 因此 只有在桌面上查看网站时 才应将广告代码放置在 html 中 css 可以使用 display none 但这违反了
  • 事件监听器如何/何时附加到 d3.js 中?

    我正在尝试制作一个 SVG 编辑器 长话短说 我需要将鼠标事件附加到
  • React Native:当您的应用程序关闭时是否有回调函数?

    我有一个 setInterval 即使您关闭 而不是退出 应用程序也会继续运行 我想在我的应用程序关闭或设备进入睡眠状态时调用一个函数 以便清除 setInterval AppState 是你的朋友 看看AppState 的文档 https
  • 离子选择:预选值在单击一次之前是不可见的

    我刚刚在 ionic 版本 6 中创建了一个 ion select 我的问题是 我在页面加载时已成功预选了一个值 但此预选值未显示在 UI 中 它只是在我单击选择之后出现 但在它没有出现之前 如图 2 所示 我在 ionViewWillEn

随机推荐