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 :

Changement de classe d'élément


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 480
    Par défaut Changement de classe d'élément
    Bonjour,

    J'ai constaté un fonctionnement qui me surprend et dont je ne comprends pas pourquoi il se produit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		var liste_nomenclature_button = document.getElementsByClassName('arrow_bottom');
    		for(i=0; i < liste_nomenclature_button.length; i++) {
    			liste_nomenclature_button[i].classList.add('arrow_left');
    			liste_nomenclature_button[i].classList.remove('arrow_bottom');
    		}
    Avec le code ci-dessus, par exemple, si liste_nomenclature_button contient 6 éléments
    On fait d'abord add sur liste_nomenclature_button[0]
    liste_nomenclature_button ne contient alors plus que 5 éléments !?!?!?!?
    Ces éléments sont renumérotés de 0 à 4 dans liste_nomenclature_button
    le remove se fait alors sur liste_nomenclature_button[0], qui était en fait le liste_nomenclature_button[1] d'avant
    Il y a donc un décalage.

    Une explication ?

    En faisant deux boucles successives, les opérations se font correctement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		for(i=0; i < liste_nomenclature_button.length; i++) {
    			liste_nomenclature_button[i].classList.add('arrow_left');
    		}
    		for(i=0; i < liste_nomenclature_button.length; i++) {
    			liste_nomenclature_button[i].classList.remove('arrow_bottom');
    		}

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,

    Les méthodes document.getElements.......() renvoient une HTMLCollection.

    Une HTMLCollection est une liste dynamique de noeuds, elle est automatiquement mise à jour en cas de suppression/ajout d'éléments, correspondant aux critères, dans le DOM, en d'autres termes tout changement dans le DOM affecte le contenu de la Collection.

    Toutes les explications, ou presque, sont données dans cette cette discussion.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    on peut résoudre ce problème avec .querySelectorAll() :
    La méthode querySelectorAll() de Element renvoie une NodeList statique représentant une liste des éléments du document qui correspondent au groupe de sélecteurs spécifiés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var liste_nomenclature_button = document.querySelectorAll('.arrow_bottom');
     
    for(i=0, lg=liste_nomenclature_button.length; i < lg; i++) {
      liste_nomenclature_button[i].classList.add('arrow_left');
      liste_nomenclature_button[i].classList.remove('arrow_bottom');
    }

  4. #4
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 480
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    Une HTMLCollection est une liste dynamique de noeuds
    Là, je comprends.

    Citation Envoyé par jreaux62 Voir le message
    on peut résoudre ce problème avec querySelectorAll
    Merci à vous deux

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Citation Envoyé par jreaux62
    on peut résoudre ce problème avec querySelectorAll
    ou encore utiliser une « boucle inverse » comme on le faisait jadis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const supClass = "sup-classe";
    const addClass = "add-classe";
    const elements = document.getElementsByClassName(supClass);
     
    for (let ind = elements.length - 1; ind > -1; ind -= 1) {
      elements[ind].classList.add(addClass);
      elements[ind].classList.remove(supClass);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const supClass = "sup-classe";
    const addClass = "add-classe";
    const elements = document.getElementsByClassName(supClass);
    let ind = elements.length;
     
    while (ind--) {
      elements[ind].classList.add(addClass);
      elements[ind].classList.remove(supClass);
    }
    ... par exemple

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

Discussions similaires

  1. [Reflect] connaître la classe des éléments d'une collection
    Par El Saigneur dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 12/06/2007, 12h04
  2. Changement de classe d'une variable
    Par lebigboss dans le forum Langage
    Réponses: 1
    Dernier message: 15/05/2007, 16h51
  3. rechargement contexte lors d'un changement de classe
    Par n00noors dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 10/08/2006, 17h21
  4. [Js] changement de classe css qui annule le lien
    Par michaelbob dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/05/2006, 15h07
  5. Attribuer une classe à un élément lors d'un clic
    Par Perceval dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 18/10/2005, 17h19

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