2012-03-31 18 views
38

tek metin düğümü nasıl değiştirilir:sonraki html sahip eleman

<label for="user_name"> 
    <abbr title="required">*</abbr> 
    Name 
</label> 

Ve jquery ile Title etiket başlığını değiştirmek istiyorum. Yani yapmam

$('label[for=user_name]').html('Title') 

Ve Yani

(abbr etiketiyle) Tüm iç html yerine, sadece Name ne kolay yolu değiştirmek için?

+0

Bir kopyası gibi görünüyor ** [JQuery öğesinin alt öğelerini değiştirmeden öğenin metnini nasıl değiştirebilirim?] (Http://stackoverflow.com/questions/4106809) ** – hippietrail

cevap

58

bunu da metin düğümleri dönecektir contents() yöntemi kullanırsanız.

// get/change node content not children 
jQuery.fn.content = function(n){ 
    var o = $(this).clone(); 
    var c = o.children().remove(); 
    if (typeof n === "string"){ 
     o.html(n); 
     $(this).html(c).append(n); 
    } 
    return o.html(); 
} 

: http://jsfiddle.net/yPAST/1/

+1

Sadece 1 etiket manipüle etmek istiyorum –

+0

İlginç .. Girişim başına sadece bir etiketim var, bu yüzden benim için uygun – MikDiet

+2

Not: 'textContent' özelliği * sürüm * 9'dan önce IE'de mevcut değil. –

1

Sen, yalnızca abbr elemanı seçmek saklayın ve sonra saklanan eleman artı değiştirilmiş başlığı ile tüm içeriği değiştirebilirsiniz: Bu fiddle

+0

Bunu benzer şekilde yapıyorum, teşekkürler – MikDiet

2

It may not be the prettiest way, but this works: Bkz

​$('label[for="user_name"]').each(function(){ 
    var a = $(this).children('abbr'); 
    $(this).html(a).append('Title'); 
}); 

var $label = $('label[for=user_name]'); 
$label.html($label.html().replace("Name", "Title")); 
Eğer replace kullanabilirsiniz
+0

oops !! aynı cevap ben gönderdim .. çok geç (: – Jigs

+0

haha ​​hayır endişeler :) –

1

bu

var html = $('label[for=user_name]').html().replace('Name','Testing'); 
    $('label[for=user_name]').html(html); 

kontrol başarmak: http://jsfiddle.net/DyzMJ/

+0

Ben hangi etiket olacağını bilmiyorum .. 'İsim' olabilir, başka bir şey olabilir .. – MikDiet

1

Evans çözüm jquery fn rahat kullanmak olduğunu yapmak için eklendi: jQuery metin düğümü yöntemleri olmadığından, Demo

$('label[for="user_name"]').contents().last()[0].textContent='Title'; 

bir DOM düğümüne son düğümü dönüştürmek Kullanım Şekli: $('myselector').content('NewContentString');

34

Geç cevap için özür dileriz ... Ama burada sadece jQuery kullanarak yapmanın bir yolu var:

$('label').contents().last().replaceWith("Title"); 
+1

Gününü kaydettiniz. Teşekkürler :) –

+1

Bu IE10 ve jquery 1.4 için çalıştım – dxrsm

+1

'replaceWith' için bir dize HTML gibi ele alınır; etiketleri içeriyorsa DOM öğelerine ayrıştırılır. – holmis83

0

BuBu seferki gole çoğu tarayıcı

$('label[for="user_name"]').contents().last()[0].nodeValue = 'Title'; 

için çalışmış ancak daha manipüle eğer textContent

$('label[for="user_name"]').contents().last()[0].textContent='Title'; 
+0

Not: 'textContent' özelliği, sürüm 9'dan önce IE'de * yoktur *. –

0

desteklenmez beri ie8 sorunları verdi çözümdür 1 etiketle her etiketi seçebilir ve metni jquery ile değiştirebilirsiniz:

ve ikinci etiket için:

$('label[for="user_lastname"]').contents().last().replaceWith("Title2"); 

ve benzeri ...