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 :

Javascript insensible à la casse


Sujet :

JavaScript

  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 Javascript insensible à la casse
    Bonjour,

    Voir ce codepen

    Le javascript vise à allumer les parents.

    Il fonctionne bien sur grand écran.

    Par contre, sur petit écran, les id en minuscule (exemple : id="a") ne sont plus allumées.

    Je ne suis pas arrivé à rendre le code insensible à la casse.

    Pouvez-vous m'aider ?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Je ne suis pas arrivé à rendre le code insensible à la casse.
    tu n'as pas à chercher à rendre JavaScript insensible à la casse, c'est peine perdue.
    C'est à toi de tenir compte de tes contraintes issues de ton analyse !

    Comme, suivant la taille de la fenêtre d'affichage, tu masques/affiches un ou l'autre de tes éléments rien ne t'empêche de leur affecter en même temps les mêmes classes.

    J'ai trouvé ton code inutilement compliqué, compte tenu des navigateurs actuels, mais bon ceci étant tu peux simplifier ta fonction initBotegaRollover pour tenir compte de ma remarque ci-dessus.

    Cela pourrait donner quelque chose comme :
    Code : 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
    function initBotegaRollover() {
      // définition fonction
      const customFunction = function (objet, doOver) {
        let id = objet.id;
        while (id.length > 1) {
          id = id.substr(0, id.length - 1);
          // récup. lower et Upper id
          elems = document.querySelectorAll("#" + id + ",#" + id.toLowerCase());
          // Array.prototype.forEach.call(elems, function(el){  // si IE support
          elems.forEach(function (el) {
            doOver ? addClass(el, 'blu') : removeClass(el, 'blu');
          });
        }
      };
      // affectation action aux tables
      const tables = document.querySelectorAll(".roll");
      // Array.prototype.forEach.call(tables, function(table){  // si IE support
      tables.forEach( function(table){
        addCustomRollover(table, customFunction);
      });
    }
    à voir si cela convient à ton besoin !

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Citation Envoyé par boteha Voir le message
    Le javascript vise à allumer les parents.
    C'est un message subliminal? Une maxime métaphysique? Une déclaration de révolte contre l'autorité parentale?

    Parce que sinon, vu que tout est dans un tableau, quel intérêt de masquer les cellules et de souligner par un script très long les lignes et les colonnes correspondant au contenu pointé?

  4. #4
    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 votre suivi.

    J'essaye ce soir le code de NoSmoking. Je vous tiens informés.

    Autrement ce script date d'il y a 10 ans, il est adapté aux navigateurs de l'époque.
    Ce n'est pas moi qu'il l'ai écrit et je dois dire que je ne suis pas assez calé en javascript pour l'améliorer.
    Il a le mérite de bien fonctionner et d'être très rapide en dépit de sa complexité.

    Citation Envoyé par javatwister
    Parce que sinon, vu que tout est dans un tableau, quel intérêt de masquer les cellules et de souligner par un script très long les lignes et les colonnes correspondant au contenu pointé?
    Masquer les cellules c'est pour avoir en petit écran une mise en page plus compacte.
    J'ai cherché à le faire en css mais là je m'y connais un peu et je n'ai pas trouvé de solution sans ajouter de la structure HTML, ce qui est regrettable, j'en conviens.

    Allumer les parents c'est un effet sympa dans un tableau arborescent.

  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,

    Le code de NoSmoking fonctionne parfaitement.

    Je l'ai intégré au codepen.

    Je mets en production avant de cliquer Résolu.

  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,

    Code bon pour Firefox, Chrome, Edge.

    Par contre ne fonctionne pas sur IE 11, je suppose que tu t'en doutais.

    Ce n'est pas trop grave mais si tu vois une petite correction à faire pour le rendre compatible avec IE c'est toujours mieux.

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    As-tu vu que les lignes 9 et 17 proposaient une alternative IE?

  8. #8
    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,

    Citation Envoyé par javatwister
    As-tu vu que les lignes 9 et 17 proposaient une alternative IE?
    Oui, j'ai vu juste après avoir posté ma question non avenue, j'allais éditer mais tu as précisé avant.

    La version compatible IE fonctionne parfaitement sur IE 11 et les autres navigateurs testés.

    Sur le codepen je laisse la version pour navigateurs autres qu'IE.

    J'attends un peu avant de cocher Résolu.

    Je vous remercie beaucoup.

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Autrement ce script date d'il y a 10 ans, il est adapté aux navigateurs de l'époque.
    effectivement JavaScript tout comme les APi associées et les navigateurs ont bien évolués depuis.

    Si l'on considère tes fonctions liées à l'affectation/suppression de classe CSS, il existe maintenant element.classList, qui te permettrait d'alléger grandement ton code.

    Il en est de même pour element.addEventListener.

    Par contre il est vrai que NodeList.prototype.forEach n'est pas reconnu par IE, et le sera donc jamais, mais un simple polyfill peut rétablir la situation.

    En prenant en compte tous ces points, plus la délégation des événements sur les <table>, ton code pourrait se résumer à une grosse vingtaine de lignes et ressembler à :
    Code : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    // polyfill pour IE support
    if (!NodeList.prototype.forEach) {
      // console.warn("define NodeList.prototype.forEach")
      NodeList.prototype.forEach = Array.prototype.forEach;
    }
    /**
     * par délégation sur les tables
     */
    function initBotegaRollover() {
      // définition fonctions
      function customFunction(el, doOver) {
        let id = el.id;
        while (id.length > 1) {
          id = id.substr(0, id.length - 1);
          // récup. lower et Upper id
          const elems = document.querySelectorAll("#" + id + ",#" + id.toLowerCase());
          elems.forEach(function (el) {
            el.classList[doOver ? "add" : "remove"]("blu");
          });
        }
      }
     
      function handleMouse(e) {
        let elem = e.target;
        // recherche par selecteur
        while (elem && elem.tagName !== "TD") {
          elem = elem.parentNode;
        }
        if (elem) {
          customFunction(elem, "mouseover" === e.type);
        }
      }
      // affectation événements sur les tables
      const tables = document.querySelectorAll(".roll");
      tables.forEach(function (table) {
        table.addEventListener("mouseover", handleMouse);
        table.addEventListener("mouseout", handleMouse);
      });
    }
    ... oui enfin une petite quarantaine de lignes , dans 10 ans il te suffira de supprimer les premières lignes quand IE sera définitivement oublié

  10. #10
    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 NoSmoking,

    Merci pour ton nouveau code.

    Par contre je pense qu'il y a un petit problème qui m'échappe.

    Regarde le codepen, il ne fonctionne plus.

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Par contre je pense qu'il y a un petit problème qui m'échappe.
    Il te faut bien sûr exécuter la fonction avec par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.addEventListener("load", initBotegaRollover);
    le code proposé ne reprend que la fonction de base

  12. #12
    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 NoSmoking,

    J'ai mis à jour le codepen et cela fonctionne parfaitement, excuse ma question de boulet.

    Je fais des tests en production et reviens vers vous.

  13. #13
    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,

    Le script de NoSmoking fonctionne parfaitement.

    Je coche Résolu.

    Pour info j'ouvre bientôt une nouvelle discussion : Se débarrasser des scripts inline.

  14. #14
    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,

    Je me permets de déterrer le sujet avec une question subsidiaire.

    D'abord je précise que le code de NoSmoking que l'on trouve dans le codepen fonctionne parfaitement en production, y compris sur IE.

    Petite évolution, j'aimerais que survol de la cellule provoque l'action non seulement sur les ascendants mais aussi sur le lien de la cellule.

    Par exemple tu survoles la cellule où se trouve Cat5e et Cat5e s'allume.
    Je parle bien de la cellule et pas uniquement du lien directement.

    J'ai essayé différents changements dans le script de NoSmoking mais j'avoue ne pas y être arrivé.

    Ce n'est sans doute qu'un petite chose à changer, j'espère que la question est claire.

    Merci de votre aide.

    EDIT

    Pardon, question stupide car c'est trop facile à faire en CSS.

    td:hover > a {color: red}

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

Discussions similaires

  1. Rendre requête insensible à la casse
    Par pierrot67 dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/02/2007, 18h53
  2. Comment effectuer une comparaison LIKE insensible à la casse ?
    Par Hervé Saladin dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 20/10/2006, 12h36
  3. SQL champ texte UNIQUE insensible à la casse
    Par Mike@Nestor dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/10/2005, 08h31
  4. Recherche insensible à la casse ET insensible aux accents.
    Par Bernard Grosdoy dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 10/07/2005, 03h32
  5. Tri insensible à la casse [IB7]
    Par patquoi dans le forum Débuter
    Réponses: 4
    Dernier message: 02/06/2003, 08h56

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