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

JavaScript Discussion :

Récupérer dynamiquement le numéro de la ligne sélectionnée d'une table HTML


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 242
    Par défaut Récupérer dynamiquement le numéro de la ligne sélectionnée d'une table HTML
    Bonjour;
    je suis debutant en developpement Web, je veux un petite exemple comment je peut récupérer dynamiquement le numéro de ligne selectionnee en table HTML.

    Merci.

    Ridha

  2. #2
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 501
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 501
    Par défaut
    qu'entends-tu par "ligne selectionnee" ?

    a default : voici une version "ligne cliquee"
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <table id="data">
        <tr>
            <td>l1c1</td>
            <td>l1c2</td>
            <td>l1c3</td>
        </tr>
        <tr>
            <td>l2c1</td>
            <td>l2c2</td>
            <td>l2c3</td>
        </tr>
        <tr>
            <td>l3c1</td>
            <td>l3c2</td>
            <td>l3c3</td>
        </tr>
    </table>
    <br />
    <span id="display"></span>
        <script>
            document.querySelectorAll("#data tr").forEach( (row, i) => {
                row.addEventListener('click', () => { showFocusedRow((i+1)); });
            });
     
            function showFocusedRow(i) {
                document.getElementById('display').textContent = `ligne [${i}]`;
            }
        </script>
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Doksuri a déjà répondu en donnant un exemple mais je me disais que cela pourrait faire un bon exercice d’essayer de faire la même chose avec un seul gestionnaire d'évènement (délégation).

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    salut!

    ou encore:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    document.querySelectorAll("#data tr").forEach(function(row,i){row.title=i+1});

  5. #5
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Doksuri a déjà répondu en donnant un exemple mais je me disais que cela pourrait faire un bon exercice d’essayer de faire la même chose avec un seul gestionnaire d'évènement (délégation).
    voila:
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <table id="ma-table">
      <tr>
          <td>l1c1</td> <td>l1c2</td>  <td>l1c3</td>
      </tr>
      <tr>
          <td>l2c1</td>  <td>l2c2</td>  <td>l2c3</td>
      </tr>
      <tr>
          <td>l3c1</td>  <td>l3c2</td>  <td>l3c3</td>
      </tr>
    </table>
     
    <p id="info-click">...</p>

    Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const maTable   = document.getElementById('ma-table')
      ,   infoClick = document.getElementById('info-click')
      ;
    maTable.onclick=e=>
      {
      if (!e.target.matches('td')) return
      infoClick.textContent = ` clic sur ligne : ${e.target.parentNode.rowIndex}`
                            + `, colonne : ${e.target.cellIndex}`
                            + ` (contenu = ${e.target.textContent})`
      }

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Oui bien joué !
    Tu as même ajouté les colonnes...
    Et l'usage de rowIndex et de cellIndex est avantageux puisque l'on utilise des propriétés déjà existantes...

  7. #7
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 501
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 501
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Et l'usage de rowIndex et de cellIndex est avantageux puisque l'on utilise des propriétés déjà existantes...
    c'est pas faux, j'avoues n'avoir pas reflechit plus de 2 sec a sont probleme
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Et puisqu'on en est à la rigolade:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.querySelectorAll("#data td").forEach(
    	c => c.title=`${c.parentNode.rowIndex+1} - ${c.cellIndex+1}`);

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 217
    Par défaut
    Bonjour,
    Citation Envoyé par Beginner.
    je me disais que cela pourrait faire un bon exercice d’essayer de faire la même chose avec un seul gestionnaire d'évènement (délégation).
    attention à ne pas perdre de vue que dans ce cas il ne faut pas qu'il y est d'élément « parasite » tel un <span>, <button> dans l'élément <td> sinon rien ne fonctionnera.
    Pour s'en convaincre il suffit de modifier le HTML comme suit par exemple, qui est, somme toute, un cas classique :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <tr>
      <td>l1c1</td>
      <td>l1c2</td>
      <td><button>Supprimer</button></td>
    </tr>
    Pour l'affectation il sera préférable de mettre l'écoute du click sur chaque tr mais pour limiter l'usage de la mémoire en utilisant une fonction dédiée et non une fonction anonyme qui serait dupliquée pour chaque tr.

    On peut néanmoins utiliser la délégation mais dans ce cas il faut prévoir une fonction de propagation de l'événement.


    Citation Envoyé par psychadelic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    infoClick.textContent = ` clic sur ligne : ${e.target.parentNode.rowIndex}`
                          + `, colonne : ${e.target.cellIndex}`
                          + ` (contenu = ${e.target.textContent})`
    Pourquoi ne pas utiliser le potentiel des « Template strings » concernant l’utilisation des chaînes multi-lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    infoClick.textContent = 
      ` clic sur ligne : ${e.target.parentNode.rowIndex},
        colonne : ${e.target.cellIndex},
        (contenu = ${e.target.textContent})
      `;

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/03/2014, 12h08
  2. [WD17] Problème avec les lignes sélectionnées d'une table
    Par cladoo dans le forum WinDev
    Réponses: 1
    Dernier message: 12/09/2012, 19h22
  3. Réponses: 2
    Dernier message: 28/08/2009, 15h43
  4. Récupérer le numéro de la ligne sélectionnée dans une variable?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/10/2007, 11h48
  5. Réponses: 1
    Dernier message: 07/06/2006, 18h56

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