2011-10-31 23 views
6

HTML:użyć jQuery .filter(), aby wybrać określony tekst wewnątrz div

<p class="greeting"> 
    hello, my name is kevin. what's yours? 
</p> 

jQuery:

$("p.greeting").filter(function(){ 
    return $this.text() === "my name is"; 
}).css("background", "green"); 

Próbuję odizolować słowa "my name is" w tagu <p class="greeting"> . Czy ktoś może mi pomóc z jQuery, ponieważ nie wydaje się działać. Dzięki.

+0

Prawdopodobny duplikat http://stackoverflow.com/questions/926580/find-text-string-using-jquery – motoxer4533

Odpowiedz

8

Proszę bardzo:

CSS:

.highlight { background-color: yellow; } 

JavaScript:

var text = 'My namE iS'; 

$('p.greeting').html(function (i, html) { 
    var regexp, replacement; 

    regexp = RegExp('(' + text + ')', 'gi'); 
    replacement = '<span class="highlight">$1</span>'; 

    return html.replace(regexp, replacement); 
}); 

demo na żywo:http://jsfiddle.net/SGCDS/5/

+0

To wygląda dobrze, chociaż aby całkowicie spełnić wymagania pytania, powinieneś ustawić klasę na tej , a następnie .css tę klasę na "zielone" tło. – Bruce

+0

niesamowite dzięki! Czy istnieje prosty sposób, aby tekst 'var text' był niewrażliwy na wielkość znaków? – pruett

+1

@Bruce Dobra rada. Już to zrobiłem. Wolę żółty kolor tła. OP może zmienić go na zielony ... –

0

Twoja funkcja zwraca zawsze wartość false. Tylko jeśli w twoim div jest dokładnie "moje imię", to zwróci true.

Spróbuj czegoś takiego:

return $(this).text().indexOf("my name is") != -1; 
+0

hmm ... nie działa. to jest -1 a nodeType? Nie jestem zaznajomiony z tym – pruett

+1

Wierzę, że twierdzenie jest takie, że jeśli text() nie zawiera pod-ciąg "moje imię jest", to .indexOf() zwróci -1. – Bruce

Powiązane problemy