Javascript在不更改子元素HTML和内容的情况下替换标记中的文本

Javascript在不更改子元素HTML和内容的情况下替换标记中的文本,javascript,jquery,Javascript,Jquery,我有一个脚本,我想在其中对用户可见的正文中的任何位置重新记录文本,如下所示: $("body").html($("body").html().replace(/replaced word/g,'HELLO')); 这是可行的,但效果很好。无论何时“替换的单词”在标签中,如a href、span、div或任何内容,它都会丢弃页面上的所有格式。在不影响页面功能的情况下,替换页面中每次出现的文本的最佳方法是什么?谢谢 编辑:多亏了talsibony和大家的帮助,我有了一个关于如何替换子元素中不影响h

我有一个脚本,我想在其中对用户可见的正文中的任何位置重新记录文本,如下所示:

$("body").html($("body").html().replace(/replaced word/g,'HELLO'));
这是可行的,但效果很好。无论何时“替换的单词”在标签中,如a href、span、div或任何内容,它都会丢弃页面上的所有格式。在不影响页面功能的情况下,替换页面中每次出现的文本的最佳方法是什么?谢谢

编辑:多亏了talsibony和大家的帮助,我有了一个关于如何替换子元素中不影响html标记的单词的答案。我希望替换为字体颜色或其他样式选项,如:

$(element).html($(element).selectorText().replace(/thisi/g,'<abbr title="hover title"><font color="#10a9cf">HELLO</font></abbr>'));
在控制台中,我收到以下错误:无法读取null的属性“replace”

<div id="parent">
    thisi sthe fpcd
    <p>p</p>
</div>

我错过了什么?再次感谢

$(“body”).html($(“body”).text().replace(/replaced-word/g,'HELLO')

我认为您必须在每个元素中单独执行 使用这个jquery小插件,我在这里重写了代码

html文件

<div id="parent">
    thisi sthe fpcd
    <p>p</p>
</div>
将其用于您的案例

allowReplaceTags = ['DIV'];
$('body').find('*').each(function (i, element) {
    if ($.inArray(allowReplaceTags,element.tagName)){
        // do replace
        $(element).selectorText($(element).selectorText().replace(/thisi/g,'HELO'));

    }

});

这看起来像是去掉了所有的HTML标记。它将改变整个HTML区域,该区域将整个页面呈现为源代码。替换了这个词。看起来您必须在所有body元素上运行一个循环。。然后在每一个单词上使用replace,除非其他人知道更好的方法……为什么不将想要替换的单词放在span或其他元素中呢。然后更改该元素的值。否则,您需要循环遍历所有元素并更改文本。我可以像您一样将其保留为“元素”吗?还是必须指定它需要迭代的元素?然后,最好的方法或替换方法是什么?对不起,javascript不是我的专长。谢谢,我认为这个答案更复杂,因为在这个p里面可能有我们不想替换的孩子,所以可能需要先得到最后一个孩子,然后爬进父母那里谢谢!那太好了!!还有一个问题-如何在replace中保留html标记?比如,让替换的单词变成不同的颜色。欢迎,关于你的第二个问题,创建一个提琴示例,我会尽力帮助你
allowReplaceTags = ['DIV'];
$('body').find('*').each(function (i, element) {
    if ($.inArray(allowReplaceTags,element.tagName)){
        // do replace
        $(element).selectorText($(element).selectorText().replace(/thisi/g,'HELO'));

    }

});