IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Filtrer les <TD> dont le contenu commence par un valeur saisie


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut Filtrer les <TD> dont le contenu commence par un valeur saisie
    bonjour

    soit une table de classe .table ... avec les lignes de la table avec des <tr class="wrap">

    je souhaite via un champ :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="search" class="findNotes" size="20" placeholder="filtrer sur...">

    ... filtrer les lignes du tableau sur les seules lignes qui commencent par les caractères saisies dans ce champ :

    je parviens à faire un truc qui ne retient que les lignes dont les <td> contiennent les caractères saisis :

    mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /// Filtrage des PRATICIENS DE LA LISTE DES PRATICIENS VUS PAR NOM
    $(document).on('keyup','.findNotes',function(){
          var div2=$('.table td');
          var motcle=$(this).val();
          if(motcle!=''){
              div2.parents('tr.wrap').show(); // on affiche ou on reaffiche tout
              div2.not(':contains('+motcle+')').parents('tr.wrap').toggle();
              }
          else{
                div2.parents('tr.wrap').show();
          }
    });
    je ne parviens par à n'afficher que les lignes qui "commencent par ..."

    une aide serait sympa

    mouchas gracias

    PS :
    Mon bout de code est en bas de ma page .php dans une balise <script>.
    Cela permet sans refaire une requête mysql à chaque caractère saisi de filtrer l'affichage du tableau ... cela me parait propre comme principe.
    A chaque appui sur une touche clavier ... keyup ... on a le jQuery qui est interrogé... et les lignes ( en fait les <td> ) qui
    ne sont pas porteuses du (des) caractère(s) saisis sont tout simplement rendu invisibles via l'utilisation de .parents() qui va donc cibler la balise <tr> ( parente de la <td> )

    mais ... je me répète ... je voudrai simplement que seules les NOMS qui commencent par les caractères saisis restent visibles .

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    Salut,
    Utilise indexOf dans un each
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <input type="search" class="findNotes" size="20" placeholder="filtrer sur..." />
    <table class="table">
    <tr class="wrap"><td>valeur 1</td></tr>
    <tr class="wrap"><td>_valeur 1</td></tr>
    <tr class="wrap"><td>valeur_1</td></tr>
    <tr class="wrap"><td>_valeur__1</td></tr>
    <tr class="wrap"><td>__valeur_1</td></tr>
    </table>
    Code jQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $(document).on('keyup','.findNotes',function(){
          var tds=$('.table td');
          var motcle=$(this).val().toLowerCase();
          tds.each(function(){
          	if($(this).text().toLowerCase().indexOf(motcle)==0){
          		$(this).parent("tr").show();
            }
            else{
            	$(this).parent("tr").hide();
            }
          });
    });
    Citation Envoyé par french-petzouille
    Mon bout de code est en bas de ma page .php dans une balise <script>.
    Cela permet sans refaire une requête mysql à chaque caractère saisi de filtrer l'affichage du tableau ... cela me parait propre comme principe.
    Il est possible aussi de mettre ton script au début de page, plus précisément dans la balise <head> en mettant ton code js à l'intérieur de
    Code jQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    $(document).ready(function(){/*ton code ici*/});
    ou
    Code jQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    $(function(){/*ton code ici*/});

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    merci toufik83...
    ta proposition me semble alléchante.
    je découvre indexof ...
    en testant ... quels que soit les caractères saisies ... cela masque toutes les balises <tr>.
    étrange !!

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    Quel est la structure de ta table ?
    Qu'est ce que tu as écris comme code jQuery ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    le code adapté à ma table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $(document).on('keyup','.findNotes',function(){
          var div2=$('.tablerow>div:nth-child(1) td.filtre');
          var motcle=$(this).val().toLowerCase();
          div2.each(function(){
          	if($(this).text().indexOf(motcle)==0){
          		$(this).parent('tr.wrap').show();
            }
            else{
            	$(this).parent("tr.wrap").hide();
            }
          });
    });
    PS : je suis sur de la notation : $('.tablerow>div:nth-child(1) td.filtre'); ( ma demande d'aide avant simplifié l'écriture )

    et ma table générée en php est composé de <tr> comme suit

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <tr class="wrap">
    					<td class="left">A</td>
    					<td class="filtre">DUPOND</td>
    					<td class="right">167.00 €</td>
    					<td class="c">Chq</td>
    					<td class="c">D</td>
    </tr>

    si je place un : alert($(this).text().indexOf(motcle));.
    j'ai toujours des -1 !! que que soit le caractère saisi !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    je viens de trouver l'anomalie

    il me faut mettre en minuscule le texte du <td>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($(this).text().toLowerCase().indexOf(motcle)==0){

  7. #7
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var div2=$('.tablerow>div:nth-child(1) td.filtre');
    c'est quoi ce sélecteur ?
    je ne vois aucune classe ".tablerow" ni aucun div dans ta table !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 08/11/2012, 16h40
  2. [XL-2010] VBA - Remplacement du contenu des cellules d'un range défini par filtre
    Par Anto_NEX dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/06/2012, 11h10
  3. Réponses: 4
    Dernier message: 17/04/2011, 10h40
  4. Sélectionner un contenu qui commence par un caractère
    Par loic38_01 dans le forum jQuery
    Réponses: 3
    Dernier message: 20/11/2010, 10h24
  5. jquery remplacer contenu dans une liste
    Par andr386 dans le forum jQuery
    Réponses: 5
    Dernier message: 12/02/2009, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo