59 votes

jQuery - trouver une ligne de tableau contenant une cellule de tableau contenant un texte spécifique

J'ai besoin d'un tr qui contient un élément td qui contient un texte spécifique. Le site td contiendra ce texte et seulement ce texte (j'ai donc besoin de text = 'foo' no text contains 'foo' logique).

J'ai donc besoin de l'équivalent du "pseudo jQuery" suivant :

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

Quelqu'un peut-il fournir la syntaxe correcte ?

108voto

Frédéric Hamidi Points 123646

Vous pouvez utiliser filtre() pour le faire :

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

1 votes

Consultez également la réponse d'@pi ci-dessous pour une approche plus récente.

4 votes

@TFD, cette approche est un peu différente, car contains() correspond aux sous-chaînes - il correspondrait aux éléments dont le texte est foobar par exemple, non seulement foo .

50voto

pi. Points 391

Je sais qu'il s'agit d'un vieux post, mais j'ai pensé que je pourrais partager une approche alternative [pas aussi robuste, mais plus simple] pour rechercher une chaîne de caractères dans une table.

$("tr:contains(needle)"); //où needle est le texte que vous recherchez.

Par exemple, si vous recherchez le texte "box", ce sera :

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

Cela renverrait tous les éléments contenant ce texte. Des critères supplémentaires peuvent être utilisés pour réduire le nombre d'éléments renvoyés.

1 votes

Cette solution contiendrait TOUT tr qui contient cela. Ainsi, si vous avez un tableau dans un tableau dans (etc.), il choisira le tr supérieur et cachera tout ce qui se trouve en dessous, mais OP veut le tr le plus proche.

17voto

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

Le texte devient rouge pour les lignes qui ont une cellule dont le texte est 'foo'.

2voto

Nalan M Points 834

Ceci recherchera du texte dans tous les td's à l'intérieur de chaque tr et affichera/masquera les tr's en fonction du texte recherché.

 $.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();
 });

1voto

Kamal kk Points 56
   <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();
            }
        });
    });

Démo Vous pouvez utiliser la méthode search() en utilisant le texte correspondant RegExp.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X