2011-05-26 34 views
45

Necesito obtener un elemento tr que contiene un elemento td que contiene texto específico. El td contendrá ese texto y solo ese texto (así que necesito text = 'foo' no la lógica text contains 'foo').jQuery - encontrar la fila de la tabla que contiene la celda de la tabla que contiene texto específico

por eso es necesario el equivalente de la siguiente pseudo jQuery ':

var tableRow = $(table td[text = 'foo']).parent('tr'); 

¿Alguien puede indicar la sintaxis correcta?

Respuesta

78

Puede utilizar filter() de hacer eso:

var tableRow = $("td").filter(function() { 
    return $(this).text() == "foo"; 
}).closest("tr"); 
+0

Magical. Gracias. – David

+1

También verifique la respuesta @pi a continuación para un enfoque más reciente – TFD

+2

@TFD, ese enfoque es un poco diferente, ya que 'contiene()' coincide con subcadenas - se correspondería con elementos cuyo texto es 'foobar', por ejemplo, no solo' foo'. –

12
$(function(){ 
    var search = 'foo'; 
    $("table tr td").filter(function() { 
     return $(this).text() == search; 
    }).parent('tr').css('color','red'); 
}); 

hará volver el texto rojo para las filas que tienen una célula cuyo texto es 'foo'.

31

Sé que esta es una publicación anterior, pero pensé que podría compartir un enfoque alternativo [no tan robusto, pero más simple] para buscar una cadena en una tabla.

$("tr:contains(needle)"); // where needle es el texto que está buscando.

Por ejemplo, si usted está buscando el texto 'caja', que sería:

$("tr:contains('box')"); 

Esto devolver todos los elementos con este texto. Los criterios adicionales podrían utilizarse para limitar la búsqueda si se devuelve varios elementos

+0

Esta solución contendría CUALQUIER tr que contenga eso. Entonces, si tiene una tabla dentro de una tabla dentro de ... (etc.), seleccionará la parte superior tr y ocultará todo debajo de ella, pero OP quiere la posición más cercana. – Malachi

2

Esto buscará el texto en todo el TD del interior de cada tr y mostrar la piel de tr/basado en texto de búsqueda

$.each($(".table tbody").find("tr"), function() {        

       if ($(this).text().toLowerCase().replace(/\s+/g, '').indexOf(searchText.replace(/\s+/g, '').toLowerCase()) == -1) 
        $(this).hide(); 
       else 
        $(this).show(); 
}); 
0
<input type="text" id="text" name="search"> 
<table id="table_data"> 
     <tr class="listR"><td>PHP</td></tr> 
     <tr class="listR"><td>MySql</td></tr> 
     <tr class="listR"><td>AJAX</td></tr> 
     <tr class="listR"><td>jQuery</td></tr> 
     <tr class="listR"><td>JavaScript</td></tr> 
     <tr class="listR"><td>HTML</td></tr> 
     <tr class="listR"><td>CSS</td></tr> 
     <tr class="listR"><td>CSS3</td></tr> 
</table> 

$("#textbox").on('keyup',function(){ 
     var f = $(this).val(); 
     $("#table_data tr.listR").each(function(){ 
      if ($(this).text().search(new RegExp(f, "i")) < 0) { 
       $(this).fadeOut(); 
      } else { 
       $(this).show(); 
      } 
     }); 
    }); 

Demo Puede realizar por el método search() con el uso de RegExp matching text

Cuestiones relacionadas