8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

替换正文中的单词

BJonas88 2月前

269 0

有没有办法替换 HTML 主体内的表格元素内的普通文本?比如将“hello”替换为“hi”?请仅使用 JavaScript,不要使用 jQuery。

有没有办法可以替换 HTML 主体内的表格元素内的普通文本?

比如将 \'hello\' 替换为 \'hi\'?

请仅使用 JavaScript ,不带 jQuery .

帖子版权声明 1、本帖标题:替换正文中的单词
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由BJonas88在本站《string》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 主体中有一个 div,里面有一个表格,然后我想替换一些普通文本而不是代码,例如用 (\'hi\') 替换 (\'hello\')

  • 如果被替换的单词恰好是类名、标签名或 html 中的任何内容,则下面的大多数解决方案将破坏所有事件和整个 dom 结构

  • 要将 HTML 中的某个字符串替换为另一个字符串,请使用 replace 上的 innerHTML :

    document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');
    

    整个主体中 hello 的第一个实例 document.getElementById 或类似方法定位您的代码来限制替换的范围。

    要替换目标字符串的所有实例,请使用带有 lobal 标志的简单正则表达式 g

    document.body.innerHTML = document.body.innerHTML.replace(/hello/g, 'hi');
    
  • 扩展字符可能会更复杂 - 您的文档采用什么编码?您确定该字符是 ü,而不是 ü 吗?

  • 你没有准确地复制我的代码;-)确保语句的两边都有 innerHTML,即:document.body.innerHTML = document.body.innerHTML.replace('ü', 'n');

  • 仅供参考 - 第一条注释中的错误是:set window.onload = clear; 没有括号 \'()\'。当您编写 clear() 时,您实际上会执行该函数,但您只想将该函数分配给 onload-handler

  • 请注意,如今使用 innerHTML 通常被认为是不好的:slideshare.net/x00mario/the-innerhtml-apocalypse

  • 我最终使用此功能可以安全地替换文本而没有任何副作用(到目前为止):

    function replaceInText(element, pattern, replacement) {
        for (let node of element.childNodes) {
            switch (node.nodeType) {
                case Node.ELEMENT_NODE:
                    replaceInText(node, pattern, replacement);
                    break;
                case Node.TEXT_NODE:
                    node.textContent = node.textContent.replace(pattern, replacement);
                    break;
                case Node.DOCUMENT_NODE:
                    replaceInText(node, pattern, replacement);
            }
        }
    }
    

    它适用于 16kB 的 findAndReplaceDOMText 有点太重的情况。

  • 非常优雅,有必要将两种情况分开吗?一个用于 ELEMENT_NODE,另一个用于 DOCUMENT_NODE。此外,似乎还有许多其他节点类型,这是否意味着其他类型无关紧要?

  • @B.Mr.W. 我不记得为什么我要把这些情况说得这么清楚。对于这个问题,这些类型就足够了。请注意,有些类型是 xml 特定的。

  • 太棒了!node.textContent.replace() 是进行简单搜索还是基于正则表达式的搜索,以及(如何)将其用于跨越多行的模式?我的目标是从表单(phpbb 论坛回复编辑器)中删除 2 个按钮。

  • 引用 13

    有时更改 document.body.innerHTML 元素 text 内容的版本

    function replaceRecursively(element, from, to) {
        if (element.childNodes.length) {
            element.childNodes.forEach(child => replaceRecursively(child, from, to));
        } else {
            const cont = element.textContent;
            if (cont) element.textContent = cont.replace(from, to);
        }
    };
    
    replaceRecursively(document.body, new RegExp("hello", "g"), "hi");
    
  • 下面的功能对我来说非常有效:

    // Note this *is* JQuery, see below for JS solution instead
    function replaceText(selector, text, newText, flags) {
      var matcher = new RegExp(text, flags);
      $(selector).each(function () {
        var $this = $(this);
        if (!$this.children().length)
           $this.text($this.text().replace(matcher, newText));
      });
    }
    

    以下是一个使用示例:

    function replaceAllText() {
      replaceText('*', 'hello', 'hi', 'g');
    }
    
    $(document).ready(replaceAllText);
    $('html').ajaxStop(replaceAllText);
    

    您也可以像这样直接替换:

    document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');
    

    但要小心,因为它也可能会影响标签、CSS 和脚本。

    编辑: 对于纯 JavaScript 解决方案,请改用此方法:

    function replaceText(selector, text, newText, flags) {
      var matcher = new RegExp(text, flags);
      var elems = document.querySelectorAll(selector), i;
    
      for (i = 0; i < elems.length; i++)
        if (!elems[i].childNodes.length)
          elems[i].innerHTML = elems[i].innerHTML.replace(matcher, newText);
    }
    
  • 如何替换特定标签中的所有文本(例如

    )包含其他文本?

  • 只需将标签名称添加到第一个输入参数,例如 replaceText('p,span', 'hello', 'hi')

  • 这无法正常工作。考虑一下:

    你好 世界

    . hello does not get replaced.
  • 我也遇到了同样的问题。我使用 innerHTML 上的 replace 编写了自己的函数,但它会搞砸锚链接等。

    为了使其正常工作,我使用了一个来完成此操作。

    该库具有出色的 API。包含脚本后,我这样调用它:

    findAndReplaceDOMText(document.body, {
      find: 'texttofind',
      replace: 'texttoreplace'
      }
    );
    
  • 这是唯一能解决我的问题的解决方案。我需要使用 REGEX 在整个网站上查找和替换电话号码,而这里的其他答案会破坏我的 DOM 事件。

  • 引用 20

    我试图替换一个非常大的字符串,但由于某种原因,正则表达式引发了一些错误/异常。

    所以我找到了这个正则表达式的替代方案,它的运行速度也相当快。至少对我来说足够快了:

    var search = "search string";
    var replacement = "replacement string";
    
    document.body.innerHTML = document.body.innerHTML.split(search).join(replacement)
    

    src: 如何替换 JavaScript 中所有出现的字符串?

返回
作者最近主题: