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 :

Allumer les têtes de ligne/colonne d'un tableau matrice.


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut Allumer les têtes de ligne/colonne d'un tableau matrice.
    Bonjour,

    Voir ce codepen.

    Le code JS allume la tête de ligne et la tête de colonne au survol d'une cellule non vide.

    Cela marche bien mais cela a été fait il y a plus de 10 ans et cela peut être simplifié aujourd'hui.

    Mon niveau en javascript réclame un peu d'assistance.

    1) Sélectionner les cellules non vides hors têtes de lignes et têtes de colonnes.

    2) Au survol d'une cellule, trouver tête de ligne et tête de colonne correspondantes.

    3) Les allumer.

    4) Éteindre quand le pointeur quitte la cellule.

    Pouvez-vous me guider un peu ?

    Merci d'avance.

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Hello,

    Je ne suis pas très doué en JS natif donc je vais donner une réponse en jQuery en espérant que ça aide

    Mais
    1] sélectionner les cellules non vides; c'est forcément le cas.
    Si on reprend le Codepen d'exemple, l'événement est sur le survol de la balise a et donc elle n'existe que si une valeur existe (travail prémaché)
    2] Ensuite pour connaitre le titre de la ligne, il suffit de prendre le premier enfant du parent (.parent().first() ou sélectionner le premier th : .parent().find('th:first-child'))
    3] Pour trouver le titre de la colonne, il suffit de récupérer l'index du parent de l'élément en cours ($(this).parent().index()) et d'utiliser cet index sur la première ligne du tableau

    J'ai refait un Codepen qui suit ces explications (avec jQuery donc) : https://codepen.io/DarkStar123456/pen/XWRwWbO

    J'ai repris le tableau d'origine, à l'exception des thead td que j'ai changé en thead th parce que c'est beaucoup plus logique d'une part, et que ça empêchait de pouvoir sélectionner correctement les nth-child() d'autre part

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    Merci de ta réponse, c'est très intéressant.

    Je vais essayer de traduire cela en JS natif car je n'emploie pas jQuery.

    Je m'y mets dès que j'ai le temps.

    Je te tiens informé.

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 453
    Points : 4 605
    Points
    4 605
    Par défaut
    salut,
    en gardant ta structure actuelle & en JS natif :

    il faut juste ajouter une class CSS pour le hightLight
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    .hightLight { color: red; }
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    document.querySelectorAll('tbody td:not(:first-of-type) a').forEach(cell => {
    	cell.addEventListener('mouseover', () => {
      	hoverCell(cell.parentNode);
      });
    });
    function clearHighLight() {
    	document.querySelectorAll('td a').forEach(a => {
      	a.classList.remove('hightLight');
      });
    }
    function hoverCell(cell) {
    	clearHighLight();
    	cell.parentNode.getElementsByTagName('a')[0].classList.add('hightLight');
      document.querySelectorAll('thead a')[cell.cellIndex-1].classList.add('hightLight');
    }
    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 !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    Merci de ta réponse.

    Je teste ce soir.

    Je vous tiens informés.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour Doksuri,

    J'ai chargé ton code sur le codepen et cela fonctionne très bien à un détail près.

    Il faut que les têtes s'éteignent quand tu sors de hover (mouseout ?).

    J'avoue que je n'ai même pas eu le temps d'analyser ton code.
    Je vais le faire.

    Je vous tiens informés.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/10/2013, 13h56
  2. Comment récupérer les numéros de ligne/colonne d'une plage
    Par Val2000 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/07/2013, 16h56
  3. Filtre et tri sur l'en-tête d'une colonne d'un tableau
    Par davidtse dans le forum GWT et Vaadin
    Réponses: 6
    Dernier message: 25/11/2010, 10h20
  4. supprimer l'espace entre les cellules d'une colonne d'un tableau
    Par 123quatre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 06/09/2007, 10h52
  5. [VBA] Masquer les sélecteurs de ligne/colonnes (1,2..,A,B,C)
    Par skual dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/03/2006, 08h52

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