Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 替换正文中的单词_Javascript_Html - Fatal编程技术网

Javascript 替换正文中的单词

Javascript 替换正文中的单词,javascript,html,Javascript,Html,有没有一种方法可以替换HTML主体中的table元素中的普通文本 比如用“你好”代替“你好” 请仅使用JavaScript而不使用jQuery将HTML中的字符串替换为另一个字符串。请使用以下方法: 请注意,这将在整个正文中替换hello的第一个实例,包括HTML代码中的任何实例(例如,类名等),因此请谨慎使用-为了获得更好的结果,请尝试通过使用或类似的代码来限制替换范围 要替换目标字符串的所有实例,请使用带有global标志的简单正则表达式: document.body.innerHTML =

有没有一种方法可以替换HTML主体中的table元素中的普通文本

比如用“你好”代替“你好”


请仅使用JavaScript而不使用jQuery

将HTML中的字符串替换为另一个字符串。请使用以下方法:

请注意,这将在整个正文中替换
hello
的第一个实例,包括HTML代码中的任何实例(例如,类名等),因此请谨慎使用-为了获得更好的结果,请尝试通过使用或类似的代码来限制替换范围

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

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

使用默认的javascript字符串替换函数

var curInnerHTML = document.body.innerHTML;
curInnerHTML = curInnerHTML.replace("hello", "hi");
document.body.innerHTML = curInnerHTML;

下面的功能非常适合我:

// 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);
}
函数替换文本(选择器、文本、新文本、标志){
var matcher=newregexp(文本、标志);
var elems=document.querySelectorAll(选择器),i;
对于(i=0;i
我也有同样的问题。我在innerHTML上使用replace编写了自己的函数,但它会破坏锚定链接等

为了使它正常工作,我使用了一个工具来完成这项工作

这个库有一个很棒的API。包括脚本后,我这样称呼它:

findAndReplaceDOMText(document.body, {
  find: 'texttofind',
  replace: 'texttoreplace'
  }
);
replaceInText(document.body,"search term","replacement");

我不熟悉
Javascript
,刚刚开始学习这些技能。请检查以下方法是否有助于替换文本

<script>

    var txt=document.getElementById("demo").innerHTML;
    var pos = txt.replace(/Hello/g, "hi")
    document.getElementById("demo").innerHTML = pos;

</script>

var txt=document.getElementById(“demo”).innerHTML;
var pos=txt.replace(/Hello/g,“hi”)
document.getElementById(“demo”).innerHTML=pos;

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

所以我找到了正则表达式的另一种选择,它也运行得非常快。至少对我来说足够快:

var search = "search string";
var replacement = "replacement string";

document.body.innerHTML = document.body.innerHTML.split(search).join(replacement)

src:

尝试在相当大的文档上应用上述建议的解决方案,替换innerHTML甚至innerText中可能存在的非常短的字符串,这样您的html设计最多也会被破坏

因此,我首先通过HTMLDOM节点只拾取文本节点元素,如下所示

function textNodesUnder(node){
  var all = [];
  for (node=node.firstChild;node;node=node.nextSibling){
    if (node.nodeType==3) all.push(node);
    else all = all.concat(textNodesUnder(node));
  }
  return all;
}

textNodes=textNodesUnder(document.body)
for (i in textNodes) { textNodes[i].nodeValue = textNodes[i].nodeValue.replace(/hello/g, 'hi');    

`接下来,我在循环中对所有文本进行了替换

我最终使用了此功能,以安全地替换文本而无副作用(到目前为止):


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

希望添加一个示例,因为我不断遇到此错误:

Uncaught TypeError: element.childNodes is not iterable
这样使用:

findAndReplaceDOMText(document.body, {
  find: 'texttofind',
  replace: 'texttoreplace'
  }
);
replaceInText(document.body,"search term","replacement");

对于我来说,jQuery选择器不起作用。

有时更改
document.body.innerHTML会破坏页面上的一些JS脚本。以下是仅更改
文本
元素内容的版本:

函数替换(元素、从、到){
if(element.childNodes.length){
forEach(child=>replace(child,from,to));
}否则{
const cont=element.textContent;
如果(cont)element.textContent=cont.replace(from,to);
}
};
替换(document.body,new RegExp(“hello”、“g”)、“hi”);

使用
innerHTML.replace
会很快工作,这会破坏DOM状态

您可以通过在输入字段上设置
“autofocus”
,然后在body上更改
innerHTML
,来复制这一点,它将失去焦点

破坏性较小的方法是:

//检索主体的所有子节点
var childNodes=document.body.childNodes;
//开始更换
替换节点(子节点,“搜索”、“替换”);
函数replaceInNodes(节点、搜索、替换){
//遍历所有节点
对于(var i=0;i
更多信息可在此处找到:


注意:我是上述链接的作者

你能说得更具体些吗?你想替换什么,它在主体中的位置,等等。主体有一个div,在这个表中,我想替换一些普通的文本,而不是像用(“hi”)替换(“hello”)这样的代码。如果替换的单词恰好是类名,下面的大多数解决方案都会破坏所有事件和整个dom结构,标记名或htmlIt中的任何内容看起来问题和答案都是错误的。它询问如何替换单词而不是字符。例如替换此
hello,这是一个文本随机文本hello
应该是
hi,这是一个文本随机文本hello
。但是,这里的所有其他答案都替换了字符而不是单词。我认为这比这里的答案要好。这里对我不起作用是我使用的
window.onload=clear();函数clear(){document.body.innerHTML=document.body.replace('u','n');}