Javascript 为什么replace()会中断onclick()?
我正在使用“替换”在动态加载的网页中搜索此符号,并将其替换为®。我在这个问题中找到了这样做的代码: 然而,在我添加了这段代码之后,这个函数停止了工作Javascript 为什么replace()会中断onclick()?,javascript,jquery,Javascript,Jquery,我正在使用“替换”在动态加载的网页中搜索此符号,并将其替换为®。我在这个问题中找到了这样做的代码: 然而,在我添加了这段代码之后,这个函数停止了工作 document.getElementById("backToClasses").onclick = function() { console.log("Clicked"); }; 谁能告诉我为什么会这样 在第二段代码中(我假设它首先运行),您正在DOM中定位一个元素并为其属性赋值 第一段代码经过DOM并将大块代
document.getElementById("backToClasses").onclick = function() {
console.log("Clicked");
};
谁能告诉我为什么会这样 在第二段代码中(我假设它首先运行),您正在DOM中定位一个元素并为其属性赋值 第一段代码经过DOM并将大块代码转换为HTML源代码,然后修改源代码,然后从中生成新的DOM元素,并用它们替换以前存在的任何元素 因此,ID为backtoclass的元素
如果您打算采用这种方法,那么您应该考虑仅在文档中的文本节点上循环,并使用文本而不是HTML进行处理。为此,您需要递归地在DOM上循环,并测试每个元素的节点类型 不过,最好解决您正在破解的潜在问题。几乎可以肯定,这是由于某个地方的字符编码不正确造成的
W3C有一些可能会有所帮助。在第二段代码中(我假设它首先运行),您正在DOM中定位一个元素,并为其属性赋值 第一段代码经过DOM并将大块代码转换为HTML源代码,然后修改源代码,然后从中生成新的DOM元素,并用它们替换以前存在的任何元素 因此,ID为backtoclass的元素
如果您打算采用这种方法,那么您应该考虑仅在文档中的文本节点上循环,并使用文本而不是HTML进行处理。为此,您需要递归地在DOM上循环,并测试每个元素的节点类型 不过,最好解决您正在破解的潜在问题。几乎可以肯定,这是由于某个地方的字符编码不正确造成的 W3C有一些可能会有所帮助。通过这样做:
$("body").children().each(function () {
$(this).html( $(this).html().replace(/Æ/g,"®") );
});
您重新创建了所有HTML
元素,因此之前可能绑定的所有事件都将丢失。不要使用.html()
函数替换文本。尽管如此,我不确定这是否是替换角色的最佳方式
此替换应在服务器端进行,而不是客户端。通过客户端操作(JavaScript),您可能会遇到不同的问题,比如SEO(谷歌用编码错误的字符为您的站点编制索引)。如果文件中的字符是这样的,只需在该文件中替换它们,确保使用正确的编码保存文件。执行以下操作:
$("body").children().each(function () {
$(this).html( $(this).html().replace(/Æ/g,"®") );
});
您重新创建了所有HTML
元素,因此之前可能绑定的所有事件都将丢失。不要使用.html()
函数替换文本。尽管如此,我不确定这是否是替换角色的最佳方式
此替换应在服务器端进行,而不是客户端。通过客户端操作(JavaScript),您可能会遇到不同的问题,比如SEO(谷歌用编码错误的字符为您的站点编制索引)。如果文件中的字符是这样的,只需在该文件中替换它们,确保使用正确的编码保存文件。您正在替换
正文
的全部html内容。当使用replace方法重新生成整个DOM时,您需要重新分配所有先前就位的事件处理程序。您正在替换正文
的全部html内容。当使用replace方法重新生成整个DOM时,您需要重新分配所有先前的事件处理程序。使用text()
也会破坏HTML元素,它不会创建新的元素,因此所有段落、链接等都将丢失。是的,这就是为什么我说我不确定它是否会工作。使用text()
也会破坏HTML元素,只是不会创建新的元素,所以所有的段落、链接等都会丢失。是的,这就是为什么我说我不确定它是否会工作。非常感谢您的解释!我花了一点时间对replace()的工作原理做了更多的研究,并没有尝试一下子搜索所有内容,而是使用了一些较小的搜索。工作很有魅力。非常感谢你的解释!我花了一点时间对replace()的工作原理做了更多的研究,并没有尝试一下子搜索所有内容,而是使用了一些较小的搜索。工作得很有魅力。