2012-08-08 11 views
82

Ho un div come:Sostituire solo il testo all'interno di un div con jQuery

<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 io sono il testo" a "Ciao sto sostituire" utilizzando jQuery. Questo potrebbe essere facile ma non sono in grado di farlo.

L'utilizzo di $('#one').text('') svuota completamente l'intero #One div.

+0

Potrebbe essere utile per fare un [violino] (http://jsfiddle.net) – Inkbug

+0

Usa $ ('# uno'). Find ('. First'). Text ('Salve, sostituisco'); invece di $ ('# uno'). text(); oppure puoi accedere direttamente all'elemento e sostituire il testo usando $ ('. first'). text ('Salve I am replace'); –

risposta

109

Il testo non deve essere da solo. Inseriscilo in un elemento span.

Change a 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'); 
+21

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

+0

funziona, ma come può essere eseguito o meno? posso eseguire un'eccezione se vuoto o tag modificato? in binding non riusciti perché questo div creato da code.from REST o database –

11

È necessario impostare il testo a 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')); 
+0

Mentre ciò funzionerebbe in questo caso, non mi piace questa opzione perché se si sostituisce la parola "first" con la parola "second" o solo "i" con '' rovinerebbe i tuoi tag – JSON

84

Trova i nodi di testo (nodeType==3) e sostituire la 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/

+5

Davvero un'ottima risposta! – wcolbert

+2

Questa dovrebbe essere la risposta accettata dal momento che questo non richiede di cambiare l'html! –

+1

@Jamiec FWIW Adoro questa risposta perché consente di sostituire senza preoccuparsi di eseguire il markup/script ecc. – sehe

7

Se effettivamente conoscere il testo che si sta per sostituire si potrebbe usare

$('#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 i nodi di testo e il secondo nodo è quello che vogliamo sostituire.

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

+1

Da 'jQuery 1.8.3'' $ ('# uno'). Contenuto (': not (*)') 'non selezionerà nulla. – BruceHill

0

Un altro approccio è tenere questo elemento, modificare il testo, quindi aggiungere l'elemento posteriore

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