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.