2010-06-13 16 views

cevap

11

Geçerli bir kimlik karakteri olmadığından # kimliğinden kaldırdım.

bu deneyin göz önüne alındığında:

Canlı Örnek: Metin düğümlerinin dahil elemanınhttp://jsfiddle.net/u49wy/

var $contents = $('#alvin').contents(); 

$contents[$contents.length - 1].nodeValue = 'orange'; 

.contents() döner tüm alt düğümler.

kod sonra (bir metin düğümü) son eleman düğümü alır ve bir metin düğümü değerini güncellemek nasıl olduğu, onun nodeValue günceller.

+0

+1, bana biraz da farklı olduğu için çözümümü gönderdiğime rağmen beni dövdün, –

+0

@Andy - + için teşekkürler. Evet, benimki belli bir konumlandırma varsayımıyla çalışıyor. OP'nin özel ihtiyaçlarına bağlı olarak bir atılacak. – user113716

+0

Teşekkürler! Yapılabileceğini biliyordum. Keşke E * -E * .com (Andy'e de) gibi çoklu çözümler verebilseydim. –

6

patrick beni alt ama benim çözüm iki tarafında etiketler olsaydı bile, her yerde metni seçin edeceğini biraz daha dinamiktir:

$('#alvin').contents().filter(function() { 
    return this.nodeType == 3; 
})[0].nodeValue = "orange"; 

Bu, yalnızca metin düğümlerinin kalması için içeriği filtreleyerek yapar ve ilk nodeValue'u "turuncu" olarak değiştirir.

http://jsfiddle.net/ssRyB/

+0

Teşekkürler! Keşke E * -E * .com gibi çoklu çözümler verebilseydim. –

1

id="#alvin" jQuery için veya CSS bir seçicinin parçası olarak kullanılır geçerli söz dizimi, '#' değildir.

Bu çok sınırlı örnek için, "elma" yerine "turuncu" ile değiştirin. Aslında innerHTML'u okurum ve yeniden yazabilirim. Bunun için jQuery kullanmıyorum bile. jQuery başıboş metin düğümlerini seçmek için temiz bir yol olmadığı için

window.onload = function() { 
    var alvin = document.getElementById('alvin') 
    alvin.innerHTML = alvin.innerHTML.replace('apple', 'orange'); 
} 

Hiç jQuery kullandı. Peki ya çocuk metin düğümlerini açıklığa sardıysak? Biz bu yapabilirdi: böyle, ona almak için

<a id="alvin" href="http://www.camille.com"><ins class="xxx">Anna</ins><span>apple</span></a> 

Sonra + bitişik seçiciyi kullanabilirsiniz - ins+span bir anlama gelir: Bu şekilde

$('#alvin').contents().filter(function() { 
    return this.nodeType == 3; 
}).wrap('<span></span>').end(); 

, biz yapıyla bırakılır <span><ins> sonrası:

var elem = $('#alvin ins+span'); 
elem.text(elem.text().replace('apple', 'orange')); 
+0

Çok fazla jQuery var ...;) –

+0

Evet, cevabımdan da çok memnun değildim. İkinci bir yaklaşım ekledim. – artlung

+0

Sözdizimini düzelttim; Teşekkürler! –

0

(gerçi çok güzel değil) bir başka yolu:

$("#alvin").html($("#alvin").html().replace(/apple$/,'orange')); 

Düzenleme: Apple'ın sonunda $ eklendi. Teşekkürler Patrick.

+1

Aslında 'a' etiketinin kapanmasıyla çalışmaz, çünkü 'alvin' içeriğinin bir parçası değildir. '.html()' yöntemi yalnızca iç HTML içeriğini döndürür. Seçici tarafından eşleşen etiket kümesinin hiçbir kısmı. Yine de, giriş göstergesinin bir ucunu kullanabilirsiniz. :) – user113716

İlgili konular