Jquery kullanarak yalnızca bir div içindeki metni değiştirin


106

Bende şöyle bir div var:

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

Jquery kullanarak yalnızca "Merhaba ben metin" olan metni "Merhaba değiştiriyorum" olarak değiştirmeye çalışıyorum. Bu kolay olabilir ama yapamıyorum.

$('#one').text('')Sadece kullanmak tüm #Onediv'i boşaltır .



$ ['# Bir'] kullanın. Find ('. İlk'). Text ('Merhaba, ben değiştiriyorum'); $ ['# one'] yerine text (); veya $ ('. first']. text ('Merhaba, ben değiştiriyorum') kullanarak öğeye doğrudan erişebilir ve metni değiştirebilirsiniz;
Kartik Chauhan

Yanıtlar:


136

Metin kendi başına olmamalıdır. Bir spanelementin içine koyun .

Şununla değiştirin:

<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
Bu, HTML üzerinde kontrol sahibi olduğunu söylemeyen OP'nin sorusuna cevap vermiyor.
katran

1
bu işe yaradı ama nasıl uygulanacağından veya yapılmayacağından nasıl emin olabilirsiniz? Boşsa veya etiket değiştirilirse istisna çalıştırabilir miyim? başarısız bağlamalarda bu div kod tarafından yaratıldı. REST'ten veya veritabanından
saber tabatabaee yazdi

122

Metin düğümlerini ( nodeType==3) bulun ve aşağıdakileri değiştirin textContent:

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

Canlı örnek: http://jsfiddle.net/VgFwS/


6
Gerçekten harika cevap!
wcolbert

7
Bu html'yi değiştirmenizi gerektirmediğinden, kabul edilen yanıt bu olmalıdır!
Wouter Rutgers

2
@Jamiec FWIW Bu yanıtı seviyorum çünkü işaretleme / komut dosyaları vb.
İle uğraşma

3
Bu benim için mükemmel çalıştı. Bazen HTML'yi değiştirmeye izin vermeyen durumlarda çalışırız (örn. SharePoint). Teşekkürler
Mark

14

Metni boş bir dizeden başka bir şeye ayarlamanız gerekir. Buna ek olarak, .html () işlevi bunu div'in HTML yapısını korurken yapmalıdır.

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

Bu durumda bu işe yarayacak olsa da, bu seçeneği sevmiyorum çünkü "birinci" kelimesini "ikinci" kelimesiyle veya sadece "i" kelimesini "ile değiştirirseniz, etiketlerinizi
JSON

10

Değiştireceğiniz metni gerçekten biliyorsanız, şunu kullanabilirsiniz:

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

http://jsfiddle.net/5rWwh/

Veya

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

$('#one').contents(':not(*)') bu durumda metin düğümleri olmayan eleman olmayan alt düğümleri seçer ve ikinci düğüm, değiştirmek istediğimiz düğümdür.

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


2
Kimden jQuery 1.8.3 $('#one').contents(':not(*)')hiçbir şey seçmeyecek.
BruceHill

0

Diğer bir yaklaşım, o öğeyi tutmak, metni değiştirmek ve ardından bu öğeyi geri eklemek.

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

0

Her ihtimale karşı HTML'yi değiştiremezseniz. Çok ilkel ama kısa ve çalışıyor. (Üst div'i boşaltır, dolayısıyla alt div'ler kaldırılır)

$('#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
Bu, #one'nin tüm alt bölümlerini kaldırır
Scot Nery

1
@ScotNery teşekkür ederim, cevabı güncelledim. (Bu belirli soruyu teknik olarak yanıtlasa da) Metni kimliği olan bir etiketle kaydırmanın dışında, oldukça zor olacağını varsayıyorum. Tek başka bir şey, bir dizgeyi değiştirmek için eşleştirmektir, ancak gerçekten kırılgandır.
ReturnTable
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.