2010-11-01 19 views
6

Estoy jugando con algunos selectores, y estoy golpeando una pared con la selección de texto dentro de una celda.jquery buscar texto dentro <td>

He aquí un simple intento que estoy haciendo.

<table> 
<tr> 
    <td>First Name</td> 
    <td>*required</td> 
    </tr> 
</table> 

que quieren cambiar la clase de esa célula a ser "rojo" - si la cadena "* necesario" se encuentra.

Aquí está mi intento en el jQuery:

$("td:contains('*required')").addClass("red"); 

que está causando todas las células para aplicar esa clase, lo que parece. ¿Alguna mejor manera de buscar texto específico?

+0

Por lo que veo, está funcionando como se esperaba. http://jsfiddle.net/nY29Q/ –

+0

Esto funciona para mí. ¿Podría vincular/publicar en http://jsfiddle.net el código que está usando en realidad? – lonesomeday

Respuesta

23

Lo que tienes obras, you can test it here, tenga en cuenta que cualquier padre <td> también contiene ese texto, sin embargo, hacer una coincidencia exacta hacer esto:

$("td").filter(function() { return $.text([this]) == '*required'; }) 
     .addClass("red"); 

You can test it here.

+0

¡+1 me ganó! – Stephen

+0

Ese es un sitio interesante. ¡Puede que tenga que marcarlo! El código que estoy usando funciona, cuando lo coloco en un sitio simple, lo que significa que debo tener algo más que funcione en mi contra. Tengo que investigar un poco más. – coffeemonitor

+0

No estoy familiarizado con la función '$ .text()' - ¿está documentada en alguna parte? – lonesomeday

5

Siempre puede usar $.filter(), donde solo se incluyen elementos en los que la devolución de llamada se cumple para la selección. Por ejemplo:

$('td').filter(function(i) { 
    $(this).html().indexOf('*required') >= 0; 
}); 

también: usted querrá ser más específico con su selector - de la eficiencia, y también debido a la respuesta de Nick. Aunque si está considerando la eficiencia, es mejor que no utilice un método que utiliza una devolución de llamada en primer lugar. :)

En cuanto a los selectores, considere usar $('#tableID > tr > td')... o algo similar.

-2

No debe estar utilizando JavaScript para hacer esto. Lo que debería estar usando es una clase de CSS:

<table> 
<tr> 
    <td>First Name</td> 
    <td class="required">*required</td> 
    </tr> 
</table> 


<style type="text/css"> 
td.required { 
    color:red; 
} 
</style> 
+0

Creo que el punto es que la celda no tiene la clase para empezar. –

+0

Ese es exactamente el punto. gracias Craver. – coffeemonitor

+0

¿No tienes control sobre el marcado? ¿Cómo estarías en la posición de escribir el JavaScript pero no ser capaz de usar el CSS apropiadamente? ¿Estás simplemente experimentando con selectores como un ejercicio de aprendizaje? – SnickersAreMyFave