2013-04-18 22 views
28

Bir öğede bir metin dizisi bulmak ve bazı yayılma etiketlerini yuvarlak bir şekilde kaydırmak istiyorum. Ör:Bir öğenin içindeki bir metin dizesini bulun ve bazı yayılma etiketlerini yuvarlak kaydırın

<h2>We have cows on our farm</h2> itibaren

<h2>We have <span class='smallcaps'>cows</span> on our farm</h2> için denedim:

$("h2:contains('cow')").each(function() { 
$(this).text().wrap("<span class='smallcaps'></span>"); 
}); 

Ama bu

sadece h2 etiketi içeren bütünü sarar.

cevap

60
$("h2:contains('cow')").html(function(_, html) { 
    return html.replace(/(cow)/g, '<span class="smallcaps">$1</span>'); 
}); 

http://jsfiddle.net/w5ze6/1/ için zaten yer alacağını

+2

Soruyorum çünkü ilgileniyorum - Kullandığınız sözdizimi hakkında bazı belgeleri nerede bulabilirim? Özellikle 'işlev (_, html)'. –

+1

@Evan Ben jQuery 1.4 olarak jQuery belgeleri, http://api.jquery.com/html/, en iyi olduğunu düşünüyorum, html yöntemi bir işlevi kabul eder, ilk parametre indeksi ve ikincisi html içeriği . – undefined

+0

Evet, bunu gördüm - ama sadece '_' bu endeks gibi tedarik edebilirsin? Temelde sadece boş bir dizin mi gönderiyor? –

8

Başka bir yaklaşım, anahtar kelimeye göre bölün ve güncelleştirilmiş html'ye katılın.

$("h2:contains('cow')").html(function(_, html) { 
    return html.split('cow').join("<span class='smallcaps'>cow</span>"); 
}); 

Not: Bu test değil ama bu bir değiştirme yapıyor daha kötü performans göstereceğini tahmin ediyorum, ama rakam ı bilgilendirme amaçlı

+0

Bu ince teşekkürler arkadaşının :) –

+0

Teşekkür işleri, başlamak için anahtar kelimenin etrafında html etiketleri oradayken yukarıda başarısız oldu biri. Bu mükemmel çalışıyor. Bir alternatife sahip olmak güzel. –

+0

Hattın birkaç yıl geçtiğini biliyorum, ancak bu cevap için çalışan bir keman oluşturdum .... http://jsfiddle.net/v2nqu05o/ – Studocwho

0
$("h2:contains('cow')").each(function() { 
    var newText = $(this).html().replace("cow", "<span class='smallcaps'></span>"); 
    $(this).html(newText); 
}); 
+0

Öğenin html'sini ayarlamak için bunu değiştirmelisiniz. metin –

+0

@JustinBicknell İyi nokta, güncellendi. –

0

Benim durumumda, hedef div içinde bir etiketim var ve bazı metinler bu metni bir linke sarmam gerek.

Bunu nasıl denediniz "Ne denediniz".

var oldText = $(this).text(), 
newText = $(this).html().replace(
    oldText, 
    "<a class='k-link' href='#' class='smallcaps'>" + 
     oldText + 
    "<span class='k-icon k-i-arrow-n'></span></a>" 
); 
$(this).html(newText);