2011-10-31 24 views
6

HTML:Uso jQuery .Filter() para seleccionar texto específico dentro 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"); 

Estoy intentando aislar las palabras "mi nombre es" en la etiqueta <p class="greeting"> . ¿Alguien puede ayudarme con jQuery ya que no parece funcionar? Gracias.

+0

Posible duplicado de http://stackoverflow.com/questions/926580/find-text-string-using-jquery – motoxer4533

Respuesta

8

Aquí van:

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); 
}); 

Demostración en directo:http://jsfiddle.net/SGCDS/5/

+0

Esto se ve bien, aunque para cumplir completamente con los requisitos de la pregunta, debe establecer alguna clase en ese y luego .css esa clase en el fondo "verde". – Bruce

+0

gracias increíbles! ¿Hay alguna manera directa de tener 'var text' para que no distinga entre mayúsculas y minúsculas? – pruett

+1

@Bruce Buen consejo. Eso ya lo hice. Prefiero el color de fondo amarillo. El OP puede cambiarlo a verde ... –

0

Su función devuelve siempre falsa. Solo si hay exactamente "mi nombre es" en su div, volverá verdadero.

Pruebe algo como esto:

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

hmm ... parece que no funciona. ¿Es -1 un nodeType? no estoy familiarizado con este – pruett

+1

Creo que la afirmación es que si el texto() no contiene la subcadena "mi nombre es", entonces .indexOf() devolverá -1. – Bruce

Cuestiones relacionadas