为什么 replace() 会破坏 onclick()
Why is replace() disrupting onclick()?
我正在使用替换在我的动态加载的网页中搜索此符号 Æ 并将其替换为 ® .我在这个问题中找到了这样做的代码:使用 JS 查找和替换文档中的特定文本字符
$("body").children().each(function () {
$(this).html( $(this).html().replace(/Æ/g,"®") );
});
但是,在我添加此代码后,此函数停止工作。
document.getElementById("backToClasses").onclick = function() {
console.log("Clicked");
};
谁能告诉我为什么会发生这种情况?
在第二个代码块(我假设它首先运行(中,您将在 DOM 中找到一个元素并为它的属性赋值。
第一块代码遍历 DOM 并将其中的大块转换为 HTML 源代码,然后修改该源代码,然后从中生成新的 DOM 元素并用它们替换之前的任何内容。
因此,ID为backToClasses
的元素:
- 获取单击处理程序
- 转换为 HTML
- 被摧毁
- 被从其旧 HTML 创建的新版本所取代
单击处理程序仅在 DOM 上出现,因此新元素没有它。
如果要采用此方法,则应考虑仅循环文档中的文本节点并处理文本而不是HTML。为此,您需要递归循环 DOM 并测试每个元素的节点类型。
不过,最好解决您正在破解的潜在问题。几乎可以肯定,这是由于某处错误指定的字符编码。
W3C 提供了一些关于字符编码的材料,可能会有所帮助。
通过这样做:
$("body").children().each(function () {
$(this).html( $(this).html().replace(/Æ/g,"®") );
});
重新创建所有HTML
元素,因此之前可能已绑定的任何事件都将丢失。不要使用 .html()
函数替换文本。而且,我不确定这是替换角色的最佳方式。
此替换应在服务器端完成,而不是在客户端完成。通过在客户端(在JavaScript中(执行此操作,您可能会遇到不同的问题,例如SEO(Google使用编码错误的字符索引您的网站(。如果文件中的字符是这样的,只需替换该文件中的字符,确保使用正确的编码保存文件。
相关文章:
- 在React中,为什么我必须绑定onClick函数而不是调用它
- 为什么我的javascript脚本在页面加载时运行,而不是使用onclick
- 为什么body元素上的onclick事件不起作用
- 为什么我的按钮的 onClick() 方法没有用
- 为什么这个onClick不起作用
- 为什么您需要在firefox中为onClick传递事件,而不使用Angular为chrome传递事件
- 为什么onclick属性不起作用
- 为什么onClick功能不是'未识别
- 为什么我的onclick没有链接到我的Javascript
- 为什么onclick函数不起作用
- 为什么当我调用具有返回值的函数时,我的 onclick 事件不起作用
- 从 onclick 调用函数,为什么我的参数被评估为 true
- 为什么函数调用多个 onClick 事件
- 为什么Javascript不会添加onclick
- 为什么我不能在我的OnclientClickEvent之后执行我的onClick
- 为什么我的 onclick 事件不显示我的 JSON 文件
- 为什么当同级节点的“display”属性发生更改时,React 组件的 onClick 事件处理程序不会触发
- 为什么在循环中动态将 .onclick 添加到 img 元素需要返回函数()
- 请问为什么这段代码在 onclick 事件后刷新我的页面
- 为什么当我尝试在节点中运行函数时,Onclick=“function()” 会显示 404