Le tuto ici : http://www.grafikart.fr/tutoriels/jquery/fuzzy-search-314 Hello, J'ai suivis ce tuto et j'ai tenté de l'adapter à un tableau et de faire la recherche dans des td. Tout fonctionne à merveille (j'ai simplement remplacé les span par des td et appliqué l'id #filtre à ma table. Cependant, else{td.hide();} fonctionne mais ce que je voudrai c'est qu'il me cache uniquement les tr ne comprenant pas de td comprenant un résultat. (Narmol quoi). td.parent().(hide(); ne fonctionne pas et cache tout. Ce qui est normal car dans chaque ligne, il y aura au moins un td ne contenant pas de résultat et va donc cacher la tr. Je suis novice en jQuery et ne sais pas comment passer l'instruction pour qu'il hide() uniquement les

| ne contenant pas de avec un résultat. (les td contenant un résultat contiennent aussi un contrairement à ceux n'ayant pas de résultat. Un conseil, une piste de réflexion ? Merci d'avance pour vos réponses et le temps que vous accordez à mon problème. Cordialement, Noki ;) Mon code jQuery [code](function($){ $('#searchChef').focus().keyup(function(event){ var input = $(this); var val = input.val(); if(val == ''){ $('#filter tr').show(); $('#filter td').show(); $('#filter span').show(); $('#filter span').removeClass('highlighted'); return true; } var regexp = '\b(.*)'; regexp += '('+val+')(.*)'; regexp +='\b'; $('#filter td').show(); $('#filter').find('td').each(function(){ var td = $(this); var resultats = td.text().match(new RegExp(regexp,'i')); if(resultats){ var string = ''; for(var i in resultats){ if(i > 0){ if(i%2 == 0){ string += ''+resultats*+''; }else{ string += resultats*; } } } td.empty().append(string); }else{ td.hide(); } }) }); })(jQuery);[/code] |

2 réponses


Bonjour, essaye peut-être de mettre une classe sur les tr qui contiennent un td qui contient un résultat (ouch mal à la tête XD)
Non plus sérieusement,
avant la recherche

$('#filter tr').removeClass('acacher');

Puis lorsque tu trouves un résultat, en plus de mettre la span dans le td , rajoute la class au tr:

td.parent().addClass('ACacher');

Et enfin après la recherche:

$('.ACacher').hide();

Il y a sans doute plus simple, sans doute que je me suis planté donc ça va foirer Xd mais c'est une idée :)

bien cordialement

Antho

Ps: En faite, l'idée génrale, c'est que comme tu l'as dis , il y aura souvent un td sans résultat dans chaque tr.. il faut définir un moyen d'afficher ou cacher la ligne quand on trouve un résultat et surtout pas dans le else.

De plus, je ne sais pas comment se comporte la méthode hadClass si la classe y est déjà, pour plus de sécurité, on peut tester la présence d'une clase en fesant $('monselecteur').hasClass('maClasse') ça renvoit true ou false.
Dans ce cas on rajouterait la classe uniquement si elle n'y est pas déjà mais peut être que ce test est déjà présent dans la méthode addClass elle même , à voir :)

$('#filter tr').show() avant la recherche ... pour réafficher le tout et racacher ce qui n'est pas bon...
ou alors puisqu'on a des classes... autant faire ça en css..en mettant un display:none à la classe 'ACacher'