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 :

Sélectionner plusieurs ID avec queryselector


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut Sélectionner plusieurs ID avec queryselector
    Bonjour à tous
    Je bute sur le problème suivant:
    dans une page HTML, j'ai deux éléments span situés dans des div différents:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div class="zone" id="zoneM3">
                    .......................
                    <span id="unitM" class="valeur"> </span>
                </div>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
               <div class="zone" id="zoneP3">
                    ..............
                    <span id="unitP" class="valeur"> </span>
                </div>
    Je veux mettre le même texte dans chacun des span's par javascript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            if(capteur=="0"){
                document.querySelector("#unitM,#unitP").textContent="°C";
            }
            else if(capteur=="1"){
                document.querySelector("#unitM,unitP").textContent="%";
            }
    Mais il n'y a que #unitM qui est chargé!
    Alors que si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            if(capteur=="0"){
                document.querySelector("#unitM").textContent="°C";
                document.querySelector("#unitP").textContent="°C";
            }
            else if(capteur=="1"){
                document.querySelector("#unitM").textContent="%";
                document.querySelector("#unitP").textContent="%";
            }
    Les deux sont bien chargés.
    Que fais-je mal dans le premier cas?
    Merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 205
    Par défaut
    Bonjour,
    Que fais-je mal dans le premier cas?
    tu ne lis pas la documentation pourtant claire

    Ressources :

  3. #3
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Merci pour ta réponse
    oui bien sûr, mea culpa.
    Alors j'ai transformé mes deux id en class="unit" et ma commande JS en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.querySelectorAll(".unit").textContent="°C"
    Et maintenant plus rien ne s'affiche.
    Surement encore quelquechose de pas lu!

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    querySelectorAll retourne une collection...
    textContent n'est pas une propriété d'une collection mais d'un element de la collection ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre expérimenté
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juin 2014
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2014
    Messages : 458
    Par défaut
    Ce que t'explique rapidement la Grenouille de l'espace ;-) , c'est qu'il te faut "boucler" sur les éléments de cette collection. La boucle "for of" est particulièrement indiquée pour les collections.
    Tu peux donc faire tout simplement ceci :
    Code jacascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(let e of document.querySelectorAll('.unit')) {
        e.textContent += "°C"
    }
    Au passage, tu noteras que j'ai mis += "°C" et non = "°C". Sinon le texte (un nombre, j'imagine) est remplacé.

    Pour répondre à la question originale, qui relève plus du CSS que de Javascript, puisque l'argument est un sélecteur CSS, il suffit de séparer les identifiants par des virgules.

  6. #6
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Merci pour ces éclaircissements. Il est vrai qu'il y a beaucoup de choses à lire pour un bricoleur pour aboutir à un résultat viable. Et toute cette masse d'information, il faut la retenir au fil des différents projets. Et parfois il y a des problèmes de compréhension comme le choix du Javascript ou du CSS. Je comprends parfaitement les fonctions dédiées aux HTML, CSS, et Javascript. Mais lorsqu'on a des fonctions Javascript dont le résultat doit modifier la présentation de la page, je vois mal comment écrire cela en CSS?

    Bien, j'ai tenté de mettre en application vos dernières infos, mais le résultat n'est pas bon:
    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
    let capteur;
    let listeRadioCapteurs = document.querySelectorAll(".capteurs");
    listeRadioCapteurs.forEach(function(cap){
        cap.addEventListener("change",function(fcap){
            if(this.checked){       //si un radio capteur est sélectionné
                capteur=this.value;   
            }
            for(let x of document.querySelectorAll(".unit")){
                if(capteur=="0"){
                    x.textContent="°C";
                }
                else if(capteur=="1"){
                    x.textContent="%";
                }
                else if(capteur=="2"){
                    x.textContent="hPa";
                }
                else if(capteur=="3"){
                    x.textContent="Lx";
                }
            }
        })  
    })
    Je n'ai pas mis += car la class 'unit' est une zone d'affichage uniquement.
    Résultat: les différentes zones de class 'unit' ne sont pas modifiées.

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

Discussions similaires

  1. ouvrir plusieurs fenetre avec un lien
    Par demanghonj dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/10/2004, 10h35
  2. Query sur plusieurs colonnes avec count(distinct...)
    Par Jeankiki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/08/2004, 15h22
  3. [ Struts ] plusieurs conditions avec equal?
    Par njac dans le forum Struts 1
    Réponses: 7
    Dernier message: 04/06/2004, 09h04
  4. Combiner plusieurs textures avec couches alpha
    Par TibobiT dans le forum OpenGL
    Réponses: 2
    Dernier message: 01/05/2004, 15h20
  5. Economie de mémoire pour plusieur images avec la même source
    Par neness dans le forum Composants VCL
    Réponses: 5
    Dernier message: 18/01/2004, 10h56

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