2012-08-08 37 views
82

Ich habe ein div wie:nur Text innerhalb eines div mit jquery

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

Ich versuche nur den Text ändern von „Hallo, ich bin Text“ auf „Hallo, ich bin ersetzen“ mit Jquery. Das könnte einfach sein, aber ich kann das nicht machen.

Mit $('#one').text('') leert nur die ganze #One Div.

+0

Es könnte hilfreich sein, eine [Geige] zu machen (http://jsfiddle.net) – Inkbug

+0

Verwenden Sie $ ('# one'). Find ('. First'). Text ('Hallo ich bin ersetzen'); anstelle von $ ('# one'). text(); oder Sie können direkt auf das Element zugreifen und Text ersetzen, indem Sie $ ('. first') verwenden text ('Hi, ich bin ersetzen'); –

Antwort

109

Text sollte nicht für sich allein stehen. Setzen Sie es in ein span Element.

ändern es dazu:

<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

Dies beantwortet nicht die Frage des OP, wer nicht gesagt hat, dass sie Kontrolle über das HTML haben. – tar

+0

das ist funktioniert aber wie kann sicher ausgeführt werden oder nicht? Kann ich eine Exception ausführen, wenn das Feld leer oder das Tag geändert wurde? in nicht erfolgreichen Bindings, weil dieses div von code.from REST oder Datenbank erstellt wurde –

11

Sie müssen den Text etwas anderes als eine leere Zeichenfolge setzen. Darüber hinaus sollte die .html() - Funktion dies tun, während die HTML-Struktur des div beibehalten wird.

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

Während dies in diesem Fall funktionieren würde, mag ich diese Option nicht, denn wenn Sie das Wort "erste" durch das Wort "zweite" oder nur "i" ersetzen würden mit '' würde es Ihre Tags vermasseln – JSON

84

die Textknoten finden (nodeType==3) und ersetzen die textContent:

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

anschauliches Beispiel: http://jsfiddle.net/VgFwS/

+5

Wirklich gute Antwort! – wcolbert

+2

Dies sollte die akzeptierte Antwort sein, da Sie den HTML-Code nicht ändern müssen! –

+1

@Jamiec FWIW Ich liebe diese Antwort, weil sie Ersatz ermöglicht, ohne sich darum zu kümmern, die Markups/Skripte usw. zu borken. – sehe

7

Wenn Sie tatsächlich den Text wissen Sie, Sie zu ersetzen, gehen verwenden könnte

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

http://jsfiddle.net/5rWwh/

Oder

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

$('#one').contents(':not(*)') wählt nicht-Element untergeordnete Knoten in diesem Fall Textknoten und der zweite Knoten ist, die wir ersetzen wollen.

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

+1

Von 'jQuery 1.8.3'' $ ('# one'). Contents (': not (*)') 'wird nichts auswählen. – BruceHill

0

Ein anderer Ansatz ist das Element halten, den Text ändern, dann das Element anhängen zurück

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