Sostituisci le parole nel corpo del testo


94

C'è un modo per sostituire il testo normale all'interno di un elemento di tabella che è posizionato all'interno del corpo dell'HTML?

Come sostituire "ciao" con "ciao"?

Utilizzare solo JavaScript senza jQuery .


Puoi essere più specifico? Cosa vuoi sostituire, dove si trova nel corpo, ecc.
Zirak

il corpo ha un div e al suo interno una tabella, quindi vorrei sostituire un testo normale non codice come sostituire ("ciao") con ("ciao")
Wahtever

3
la maggior parte delle soluzioni seguenti distruggeranno tutti gli eventi e l'intera struttura dom se la parola sostituita fosse il nome della classe, il nome del tag o qualsiasi altra cosa in html
Muhammad Umer

Sembra che sia la domanda che le risposte siano sbagliate. Chiede come sostituire le parole e non i caratteri. Come hello, this is a text randomTexthellodovrebbe essere la sostituzione di questo hi, this is a text randomTexthello. Tuttavia, tutte le altre risposte qui sostituiscono i caratteri invece delle parole.
Orhun Alp Oral

Risposte:


139

Per sostituire una stringa nel tuo HTML con un'altra usa il metodo replace su innerHTML :

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

Tieni presente che questo sostituirà la prima istanza di in hellotutto il corpo, comprese tutte le istanze nel codice HTML (ad es. Nomi di classi ecc.), Quindi usala con cautela: per risultati migliori, prova a limitare l'ambito della sostituzione scegliendo come target il codice utilizzando document.getElementById o simile.

Per sostituire tutte le istanze della stringa di destinazione, utilizzare una semplice espressione regolare con il gflag lobal:

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

1
non ha funzionato per me ecco quello che ho usato <script type="text/javascript"> window.onload = clear(); function clear() { document.body.innerHTML = document.body.replace('ü', 'n'); } </script>
Wahtever

Può essere più complicato con i caratteri estesi: in quale codifica si trova il tuo documento? Sei sicuro che il carattere sia un ü e non & # 252; per esempio..?
Dexter

2
non hai copiato il mio codice accuratamente ;-) assicurati di avere innerHTML su entrambi i lati dell'istruzione, ad esempio: document.body.innerHTML = document.body.innerHTML.replace ('ü', 'n');
Dexter

3
FYI - Il bug nel primo commento è: impostato window.onload = clear;senza le parentesi "()". Quando scrivi, clear()esegui effettivamente la funzione, ma vuoi solo assegnare la funzione al gestore di carico
Philipp

1
Nota che l'utilizzo di innerHTML è generalmente considerato un male in questi giorni: slideshare.net/x00mario/the-innerhtml-apocalypse
kufudo

13

La funzione seguente funziona perfettamente per me:

// 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));
  });
}

Ecco un esempio di utilizzo:

function replaceAllText() {
  replaceText('*', 'hello', 'hi', 'g');
}

$(document).ready(replaceAllText);
$('html').ajaxStop(replaceAllText);

Puoi anche usare fai una sostituzione diretta in questo modo:

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

Ma fai attenzione poiché potrebbe influire anche su tag, css e script.

EDIT: come per una soluzione JavaScript pura, usa invece questo metodo:

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);
}

Come si sostituisce tutto il testo in un tag specifico (come <p> o <span>) con un altro testo?
GJZ

Basta aggiungere i nomi dei tag al primo parametro di input, ad es. ReplaceText ('p, span', 'hello', 'hi')
Ziad

Questo non funziona correttamente. Considera questo: <p> ciao <strong>world</” </p>. ciao non viene sostituito.
David Vielhuber

Ciao, sono un principiante nella programmazione. Posso fare del bene con AppleScript. Ma è tutto quello che so. Puoi darmi qualche consiglio, da cosa cominciare, il mio scopo è usare javascript per automatizzare la raccolta di database, immagini, video, compilare moduli web, caricare, potrebbe essere lavorare con Excel. Applescript va bene, ma java sembra essere un livello completamente nuovo e molto più migliore. Con cosa dovrei iniziare per raggiungere i miei scopi. Conosco 0 su javascript e non so nemmeno come far funzionare il tuo script sopra! Dove suppongo di incollarlo? Grazie mille!
Duy Duy

10

Ho finito con questa funzione per sostituire in modo sicuro il testo senza effetti collaterali (finora):

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);
        }
    }
}

È per i casi in cui i 16kB findAndReplaceDOMTextsono un po 'troppo pesanti.


Ciao, sono un principiante nella programmazione. Posso fare del bene con AppleScript. Ma è tutto quello che so. Puoi darmi qualche consiglio, da cosa cominciare, il mio scopo è usare javascript per automatizzare la raccolta di database, immagini, video, compilare moduli web, caricare, potrebbe essere lavorare con Excel. Applescript va bene, ma java sembra essere un livello completamente nuovo e molto più migliore. Con cosa dovrei iniziare per raggiungere i miei scopi. Conosco 0 su javascript e non so nemmeno come far funzionare il tuo script sopra! Dove suppongo di incollarlo? Grazie mille!
Duy Duy

Duy Duy, ci sono molti problemi. Data la sola descrizione dell'attività, è un motivo sufficiente per lasciare il lavoro.
funky-future

9

Ho avuto lo stesso problema. Ho scritto la mia funzione usando la sostituzione su innerHTML, ma rovinerebbe i collegamenti di ancoraggio e simili.

Per farlo funzionare correttamente ho usato una libreria per farlo.

La libreria ha un'API fantastica. Dopo aver incluso lo script l'ho chiamato così:

findAndReplaceDOMText(document.body, {
  find: 'texttofind',
  replace: 'texttoreplace'
  }
);

Questa era l'unica soluzione che ha funzionato per il mio problema. Avevo bisogno di utilizzare REGEX per trovare e sostituire i numeri di telefono in un intero sito e altre risposte qui avrebbero interrotto i miei eventi DOM.
DavyH

3

Stavo cercando di sostituire una stringa molto grande e per qualche motivo le espressioni regolari lanciavano alcuni errori / eccezioni.

Quindi ho trovato questa alternativa alle espressioni regolari che funziona anche abbastanza velocemente. Almeno è stato abbastanza veloce per me:

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

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

src: come sostituire tutte le occorrenze di una stringa in JavaScript?


2

Utilizza la funzione di sostituzione della stringa javascript predefinita

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

1

Prova ad applicare la soluzione suggerita sopra su un documento abbastanza grande, sostituendo stringhe piuttosto corte che potrebbero essere presenti in innerHTML o anche innerText, e il tuo design html si rompe nel migliore dei casi

Pertanto, per prima cosa prendo solo gli elementi del nodo di testo tramite nodi HTML DOM, come questo

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 successivamente ho applicato la sostituzione su tutti loro in ciclo


1

Volevo aggiungere un esempio alla risposta di funky-future mentre continuavo a ricevere questo errore:

Uncaught TypeError: element.childNodes is not iterable

usa in questo modo:

replaceInText(document.body,"search term","replacement");

non ha funzionato per me con i selettori jQuery.


1
Se hai una nuova domanda, chiedila facendo clic sul pulsante Fai domanda . Includere un collegamento a questa domanda se aiuta a fornire il contesto. - Dalla recensione
SilverNak

1
Questa non è una domanda nuova, stavo espandendo la risposta del funky-future fornendo un esempio che funziona. ho dovuto pubblicare una nuova risposta bc mi manca il rappresentante per commentare la sua.
Y Stroli

1

A volte la modifica document.body.innerHTMLinterrompe alcuni script JS sulla pagina. Ecco la versione, che cambia solo il contenuto degli textelementi:

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");

0

Sono nuovo Javascripte ho appena iniziato ad apprendere queste abilità. Si prega di verificare se il metodo seguente è utile per sostituire il testo.

<script>

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

</script>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.