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.