Existe uma maneira de substituir o texto normal em um elemento de tabela que é colocado no corpo do HTML?
Como substituir "olá" por "oi"?
Use apenas JavaScript sem jQuery .
Existe uma maneira de substituir o texto normal em um elemento de tabela que é colocado no corpo do HTML?
Como substituir "olá" por "oi"?
Use apenas JavaScript sem jQuery .
hello, this is a text randomTexthellodeve ser hi, this is a text randomTexthello. No entanto, todas as outras respostas aqui substituem os caracteres em vez de palavras.
Respostas:
Para substituir uma string em seu HTML por outra, use o método replace em innerHTML :
document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');
Observe que isso substituirá a primeira instância de em hellotodo o corpo, incluindo quaisquer instâncias em seu código HTML (por exemplo, nomes de classes etc.), então use com cuidado - para obter melhores resultados, tente restringir o escopo de sua substituição, direcionando seu código usando document.getElementById ou semelhante.
Para substituir todas as instâncias da string de destino, use uma expressão regular simples com a gsinalização lobal:
document.body.innerHTML = document.body.innerHTML.replace(/hello/g, 'hi');
<script type="text/javascript"> window.onload = clear(); function clear() { document.body.innerHTML = document.body.replace('ü', 'n'); } </script>
window.onload = clear;sem os parênteses "()". Ao escrever clear(), você realmente executa a função, mas deseja apenas atribuir a função ao manipulador onload
A função abaixo funciona perfeitamente para mim:
// 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));
});
}
Aqui está um exemplo de uso:
function replaceAllText() {
replaceText('*', 'hello', 'hi', 'g');
}
$(document).ready(replaceAllText);
$('html').ajaxStop(replaceAllText);
Você também pode usar para fazer uma substituição direta como:
document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');
Mas tenha cuidado com isso, pois pode afetar as tags, css e scripts também.
EDITAR: Quanto a uma solução JavaScript pura, use este método:
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);
}
Acabei com esta função para substituir texto com segurança, sem efeitos colaterais (até agora):
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);
}
}
}
É para casos onde os 16kB de findAndReplaceDOMTextsão um pouco pesados demais.
Eu tive o mesmo problema. Eu escrevi minha própria função usando substituir no innerHTML, mas iria estragar os links de âncora e tal.
Para fazer funcionar corretamente, usei uma biblioteca para fazer isso.
A biblioteca tem uma API incrível. Depois de incluir o script, chamei-o assim:
findAndReplaceDOMText(document.body, {
find: 'texttofind',
replace: 'texttoreplace'
}
);
Eu estava tentando substituir uma string muito grande e, por algum motivo, as expressões regulares estavam gerando alguns erros / exceções.
Então eu encontrei essa alternativa para expressões regulares que também funcionam muito rápido. Pelo menos foi rápido o suficiente para mim:
var search = "search string";
var replacement = "replacement string";
document.body.innerHTML = document.body.innerHTML.split(search).join(replacement)
src: Como substituir todas as ocorrências de uma string em JavaScript?
Use a função de substituição de string javascript padrão
var curInnerHTML = document.body.innerHTML;
curInnerHTML = curInnerHTML.replace("hello", "hi");
document.body.innerHTML = curInnerHTML;
Tente aplicar a solução sugerida acima em documentos bem grandes, substituindo strings bem curtas que podem estar presentes em innerHTML ou mesmo em innerText, e seu design de html fica quebrado na melhor das hipóteses
Portanto, em primeiro lugar, seleciono apenas elementos de nó de texto por meio de nós HTML DOM, como este
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');
`e em seguida apliquei a substituição em todos eles no ciclo
Queria adicionar um exemplo à resposta do futuro funky, pois continuava recebendo este erro:
Uncaught TypeError: element.childNodes is not iterable
use assim:
replaceInText(document.body,"search term","replacement");
não funcionou para mim com seletores jQuery.
Às vezes, a alteração document.body.innerHTMLquebra alguns scripts JS na página. Aqui está a versão, que apenas altera o conteúdo dos textelementos:
function replace(element, from, to) {
if (element.childNodes.length) {
element.childNodes.forEach(child => replace(child, from, to));
} else {
const cont = element.textContent;
if (cont) element.textContent = cont.replace(from, to);
}
};
replace(document.body, new RegExp("hello", "g"), "hi");