Sostituisci solo il testo all'interno di un div usando jquery


104

Ho un div come:

<div id="one">
       <div class="first"></div>
       "Hi I am text"
       <div class="second"></div>
       <div class="third"></div>
</div>

Sto cercando di cambiare solo il testo da "Ciao, sono testo" a "Ciao, sostituisco" usando jquery. Potrebbe essere facile ma non sono in grado di farlo.

Usando $('#one').text('')solo svuota l'intero #Onediv.


Potrebbe essere utile creare un violino
Inkbug

Usa $ ('# uno'). Find ('. First'). Text ('Ciao, sono sostituto'); invece di $ ('# uno'). text (); oppure puoi accedere direttamente all'elemento e sostituire il testo usando $ ('. first'). text ('Ciao, sono sostituto');
Kartik Chauhan

Risposte:


134

Il testo non dovrebbe essere da solo. Mettilo in un spanelemento.

Cambialo in questo:

<div id="one">
       <div class="first"></div>
       <span>"Hi I am text"</span>
       <div class="second"></div>
       <div class="third"></div>
</div>
$('#one span').text('Hi I am replace');

51
Questo non risponde alla domanda dell'OP, che non ha detto di avere il controllo sull'HTML.
tar

1
questo funziona ma come si può essere sicuri di eseguirlo o no? posso eseguire l'eccezione se vuoto o tag cambiato? in associazioni non riuscite perché questo div creato da code.from REST o database
sabre tabatabaee yazdi

122

Trova i nodi di testo ( nodeType==3) e sostituisci textContent:

$('#one').contents().filter(function() {
    return this.nodeType == 3
}).each(function(){
    this.textContent = this.textContent.replace('Hi I am text','Hi I am replace');
});

Esempio dal vivo: http://jsfiddle.net/VgFwS/


6
Davvero un'ottima risposta!
wcolbert

6
Questa dovrebbe essere la risposta accettata poiché questo non richiede di cambiare l'html!
Wouter Rutgers

2
@ Jamiec FWIW Adoro questa risposta perché consente sostituzioni senza preoccuparsi di borking il markup / script, ecc.
vedi

3
Ha funzionato perfettamente per me. A volte lavoriamo in situazioni che non consentono di modificare l'HTML (es. SharePoint). Grazie
Mark P.

14

Devi impostare il testo su qualcosa di diverso da una stringa vuota. Inoltre, la funzione .html () dovrebbe farlo preservando la struttura HTML del div.

$('#one').html($('#one').html().replace('text','replace'));

Anche se in questo caso funzionerebbe, non mi piace questa opzione perché se sostituissi la parola "primo" con la parola "secondo" o semplicemente "i" con "", i tuoi tag si
rovinerebbero

10

Se conosci effettivamente il testo che intendi sostituire, puoi usarlo

$('#one').contents(':contains("Hi I am text")')[0].nodeValue = '"Hi I am replace"';

http://jsfiddle.net/5rWwh/

O

$('#one').contents(':not(*)')[1].nodeValue = '"Hi I am replace"';

$('#one').contents(':not(*)') seleziona nodi figlio non elemento in questo caso nodi di testo e il secondo nodo è quello che vogliamo sostituire.

http://jsfiddle.net/5rWwh/1/


2
Da jQuery 1.8.3 $('#one').contents(':not(*)')non selezionerà nulla.
BruceHill

0

Un altro approccio è mantenere quell'elemento, modificare il testo, quindi aggiungere nuovamente quell'elemento

const star_icon = $(li).find('.stars svg')
$(li).find('.stars').text(repo.stargazers_count).append(star_icon)

0

Per ogni evenienza, se non puoi modificare l'HTML. Molto primitivo ma breve e funziona. (Svuoterà il div genitore, quindi i div figli verranno rimossi)

$('#one').text('Hi I am replace');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="one">
  <div class="first"></div>
  "Hi I am text"
  <div class="second"></div>
  <div class="third"></div>
</div>


1
Questo rimuove tutte le div figlio di #one
Scot Nery

1
@ScotNery grazie, ho aggiornato la risposta. (Anche se tecnicamente risponde a questa particolare domanda) Presumo oltre a racchiudere il testo con un tag che ha un ID, sarebbe piuttosto impegnativo. L'unica altra cosa è abbinare una stringa da sostituire, ma è davvero fragile.
Tabella di ritorno
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.