Comment appliquer un display a l'aide de class
Ferméflexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - 20 févr. 2023 à 23:16
- Nvcontainer windows class
- Clé windows 10 gratuit - Guide
- Montage video windows - Guide
- Windows ne démarre pas - Guide
- Windows 10 gratuit - Accueil - Mise à jour
- Windows 12 - Accueil - Windows
8 réponses
20 févr. 2023 à 10:13
Bonjour
"panel" est une CLASS et non un ID de tes DIV. tu ne dois donc pas utiliser : getElementById
20 févr. 2023 à 11:33
Interesse toi à la méthode document.querySelectorAll et pour cibler les éléments voulus, ce sont les mêmes selecteurs qu'en CSS.
Par exemple, tu pourrais cibler les éléments "masqués" ayant la class "panel"
Un selecteur du genre :
.panel[style*=display:none]
Et tu ne gardes que le premier comme tu as fais avec la méthode getByClassNames
20 févr. 2023 à 12:02
Merci jordane
je viens d'essayer ceci mais cela ne me retourne rien
const a = document.querySelectorAll(".panel[style*=display:none]"); console.log ("display",a)
20 févr. 2023 à 12:09
var a = document.querySelectorAll(".panel[style*='display:none']"); console.log ("display",a)
20 févr. 2023 à 12:42
Merci Jordane pour le code
Cela fonctionne nickel
lorsque je clic sur le bouton qui vient d'apparaitre cela me dirige vers la fonction ajouter au panier
avec laquelle je fais passer cet argument
data-qte2="0"
qui va me servir a retirer mon article de mon panier
ainsi que de supprimer les couleurs de fond
Mais je butte pour remettre ma class panel en none cette fois-ci
j'essaye avec ce code
Mais ma class ne veux pas redevenir none
Dans la console aucune erreur
if (test === "0") { console.log("je suis a 0") console.log("le nom", $(this).data('nom')) //je supprime l'article du panier var nom = $(this).data('nom') MonPanier.enlever_produit_de_panier_tous(nom); //si le nom de l'article est egal a 77777 ou 88888 ou encore 99999 je retire la couleur de fond if (nom == "77777" || nom == "88888" || nom == "99999") { const collection12 = event.currentTarget.parentElement.parentElement.parentElement.parentElement const h1 = event.currentTarget.parentElement.parentElement.parentElement.previousElementSibling collection12.style.backgroundColor = ""; h1.style.backgroundColor = ""; //si article different de 77777 ou 88888 ou 99999 alors j'utilise ce code pour enlever la couleur de fond } else { const collection12 = event.currentTarget.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement const h1 = event.currentTarget.parentElement.parentElement.parentElement.previousElementSibling console.log(collection12) collection12.style.backgroundColor = ""; h1.style.backgroundColor = ""; } document.querySelectorAll(".panel[style='display:none']"); }
20 févr. 2023 à 14:40
Ligne 24 .. aucune utilité ....
document.querySelectorAll(".panel[style='display:none']"); sert à CIBLER un élément en fonction du selecteur que tu as indiqué.
Cette ligne de code ne change par le display .. et comme tu ne l'assignes à aucune variable.. elle n'est pas utilisée donc totalement inutile !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié le 20 févr. 2023 à 13:45
j'ai modifie mon code de cette maniere
Mais ma classe ne redevient toujours pas a none
function myFunction() { var a = document.querySelectorAll(".panel[style*='display:none']"); console.log ("display",a) a[0].style.display = ''; } function myFunction2() { var a = document.querySelectorAll(".panel[style*='display:']"); console.log ("display",a) a[0].style.display = 'none'; }
<a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);myFunction();"> ajouter au panier </a> <div class="panel" style="display:none"> <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte2="0" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class=" ajouter-panier " onclick="myFunction2();"> ajouter au panier </a> </div>
20 févr. 2023 à 14:44
".panel[style*='display:']"
display: ????
je doute que ça fonctionne...
display attend soit none, soit block, soit inline-block ou n'importe quelle autre valeur "valide" pour cette propriété :
https://developer.mozilla.org/fr/docs/Web/CSS/display
.. mais vide.. non.. ..ça n'existe pas !
Modifié le 20 févr. 2023 à 16:28
Merci pour la reponse Jordane
Mais j'avais lu cela quelque part que l'on pouvait juste retirer le none pour faire l'effet inverse
bref voici mon nouveau code mais celui ci me retourne une erreur
Uncaught TypeError: can't access property "style", b[0] is undefined
Qui m'indique donc que style n'est pas defini
Peut etre le fait que le onclick est declenché dans le div de la classe panel
mon code html
<a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);myFunction();"> ajouter au panier </a> <div class="panel" style="display:none"> <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte2="0" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class=" ajouter-panier " onclick="myFunction2();"> retirer du panier </a> </div>
function myFunction() { var a = document.querySelectorAll(".panel[style*='display:none']"); console.log ("display",a) a[0].style.display = 'block'; } function myFunction2() { var b = document.querySelectorAll(".panel[style*='display:block']"); console.log ("display",b) b[0].style.display = 'none'; }
20 févr. 2023 à 17:21
As tu regardé ce que t'affiche ton console.log ?
Es-tu sûr que la variable b n'est pas null ?
As tu mis un style='display:block' par défaut sur tes divs ?
A noter qu'il est préférable de jouer avec des class CSS plutôt que l'attribut style.
Tu pourrais très bien te créer un class "visible" avec le style display block et une autre "masquee" avec le display à none.
Puis dans ton code, tu ajoutes/retire la class sur ton élément html en fonction de ce que tu veux obtenir.
20 févr. 2023 à 18:23
Merci pour ta reponse jordane
je viens de regarder pour ma variable a j'ai ceci
pour la variable b jai ceci
As tu mis un style='display:block' par défaut sur tes divs ?
non ma div par defaut doit etre en none car je la veux la cacher au depart
je ne veux que le boutton retirer du panier apparaisse que lorsque au moins un article est dans le panier
donc d'apres ce que je comprends de ce que tu m'expliques
voci mon code html , mais pour ce qui est du javascript je ne trouve aucun exemple sur google pour le realiser sur la class d'un article bien particulier
<a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);myFunction();"> ajouter au panier </a> <div class="panel" style="display:none;visibility: hidden;"> <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte2="0" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class=" ajouter-panier " onclick="myFunction2();"> retirer du panier </a> </div>
le bouton ajouter au panier lui restera toujours visible
ce n'est que la div panel qui doit apparaitre et disparaitre , suivant qu 'il y a oui ou non des quanditees de cet article dans le panier
c'est pour cela que quand je clic su ajouter au panier la div panel doit apparaitre et que lorsque je clic sur retirer du panier
la div panel doit disparaitre
20 févr. 2023 à 20:13
Où as-tu mis tes consoles.log ?
Peux-tu nous montrer le code modifié ?
À noter qu'il faut bien garder ce code là et pas celui que tu as proposé dans le message suivant...
Encore une fois, tu copies colle des codes, sans en comprendre le fonctionnement d'ou tes difficultés à les faire fonctionner comme tu le souhaites...
20 févr. 2023 à 20:23
Merci jordane
si si j'ai bien compris que mon code ci dessous fais uen boucle pour rechercher toutes les class panel et que le code que j'ai posté plus bas changera toutes les divs
mais je ne parviens pas a faire mieux pour l'instant
je suis toujours bloqué avec le code de tantot que je reposte
j'ai beau cherché, mais je ne trouve rien
function myFunction() { var a = document.querySelectorAll(".panel[style*='display:none']"); console.log ("display",a) a[0].style.display = 'block'; } function myFunction2() { var b = document.querySelectorAll(".panel[style*='display:block']"); console.log ("display",b) b[0].style.display = 'none'; }
20 févr. 2023 à 19:48
ce code fonctionne super nickel mais agit sur tous les articles
function myFunction() { const nodeList = document.querySelectorAll(".panel"); for (let i = 0; i < nodeList.length; i++) { nodeList[i].style.visibility=" visible"; } } function myFunction2() { const nodeList = document.querySelectorAll(".panel"); for (let i = 0; i < nodeList.length; i++) { nodeList[i].style.visibility=" hidden"; } }
20 févr. 2023 à 21:39
Je te propose cette fonction
function afficheMasqueDiv(display){ let laDiv = document.querySelectorAll(".panel[style*='display:"+display+"']"); console.log ("Liste des div correspondant au style cherché",laDiv); if(laDiv.length > 0 ){ let newDisplay = display == 'none' ? 'block' : 'none' ; laDiv[0].style.display = newDisplay; }else{ console.log("Aucune div avec le display = " + display + " n'a été trouvée !"; } }
Que tu peux ensuite utiliser dans tes autres fonctions :
function myFunction() { fficheMasqueDiv('none'); } function myFunction2() { afficheMasqueDiv('block'); }
Ou mieux, directement y faire appel à la place de tes deux fonction ( en passant le paramètre souhaité )
par exemple :
<a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);afficheMasqueDiv('none');">
20 févr. 2023 à 22:51
Merci jordane pour le code mais malheureusement cela ne fonctionne pas
lorsque je clic sur ajouter au panier
la div panel reste invisible
voici le code
<a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte="1" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class="btn btn-primary ajouter-panier b-items__item__add-to-cart" onclick="setTimeout(() => ouvreMaJolieAlert(event), 1000);myFunction();"> ajouter au panier </a> <div class="panel" style="display:none;"> <a style="cursor: pointer; margin-bottom: 5px;width: 90%;display: block;margin-left: auto;margin-right: auto;" data-nom="2001" data-prix="1.10" data-qte2="0" data-checkbox="2001" data-url="https://phil.pecheperle.be/image-perles/perle-verre-peche-gardon-2001.JPG" class=" ajouter-panier " onclick="myFunction2();"> retirer du panier </a> </div>
function afficheMasqueDiv(display){ let laDiv = document.querySelectorAll(".panel[style*='display:"+display+"']"); console.log ("Liste des div correspondant au style cherché",laDiv); if(laDiv.length > 0 ){ let newDisplay = display == 'none' ? 'block' : 'none' ; laDiv[0].style.display = newDisplay; }else{ console.log("Aucune div avec le display = " + display + " n'a été trouvée !"); } } function myFunction() { afficheMasqueDiv('block'); } function myFunction2() { afficheMasqueDiv('none'); }
20 févr. 2023 à 23:01
Je te donne 20 lignes de code .. et tu as été capable d'inverser les deux fonctions.... bien joué... :-)
En plus, si tu avais regardé la console tu aurais vu des messages d'erreur
J'ai fait une faute de frappe dans la fonction myFunction, j'ai oublié un a devant ffiche...
La console m'a également permis de voir que lorsqu'on affecte un style en JS, il met un espace entre les deux points et la valeur display: block
Pour que le code fonctionne, il faut donc prendre en compte cet espace.
Voici le code js corrigé
function myFunction() { afficheMasqueDiv('none'); } function myFunction2() { afficheMasqueDiv('block'); } function afficheMasqueDiv(display){ let laDiv = document.querySelectorAll(".panel[style*='display: "+display+"']"); console.log ("Liste des div correspondant au style cherché",laDiv); if(laDiv.length > 0 ){ let newDisplay = display == 'none' ? 'block' : 'none' ; laDiv[0].style.display = newDisplay; }else{ console.log("Aucune div avec le display = " + display + " n'a été trouvée !"); } }
Il faut donc aussi mettre cet espace dans ton html
<div class="panel" style="display: none;">
Modifié le 20 févr. 2023 à 23:16
Merci pour la correction jordane en fait je pensais que l'on avait besoin d'abord de la fonction afficheMasqueDiv
en premier lieu pour ensuite l'utiliser dans les fonctions myfunction et myfunction2
oui j'avais vu qu'il manquait un a puisque je l'ai corrigé , ainsi qu'une parenthese a une console
Le code fonctionne parfaitement sur un article
Je viens de l'essayer sur deux articles
Mais lorsque je clic sur ajouter au panier de l'article 2
la div panel apparait non pas sur l'article 2 mais sur le premier article
20 févr. 2023 à 10:24
bonjour Jordane
Autant pour moi
Merci pour reponse en fait je devais ecrie ceci
Mais lors du copier coller j'ai pris l'ancien code
Mais avec ce code cela ne fonctionne pas
j'ai cette erreur
Uncaught TypeError: Cannot set properties of undefined (setting 'display')"
20 févr. 2023 à 10:29
Note le S dans le mot getElementsByClassName
Comme en français, cela a une utilisé et exprime un éventuel pluriel.
Contrairement à getElementById (qui ne contient pas de S ) car un ID est forcément UNIQUE dans une page web. (le contraire serait une très grossière erreur de débutant à vite corriger ! )
En regardant la documentation de cette méthode, tu devrais comprendre comment l'utiliser : https://www.w3schools.com/jsref/met_document_getelementsbyclassname.asp
20 févr. 2023 à 10:46
Merci Jordane pour l'explicaion
oui oui je sais que l'ID doit etre unique
je suis alle voir la documentation que j'avais déjà ete voir
Mais ce qui m'ennuie c'est cette notion de tableau [0]
car lorsque je clic le bouton ajouter au panier de l'article 2003
je devrais savoir a quel place dans le tableau se trouve cette class "panel"
afin de pouvoir la rendre visible
je supposse que cela doit se faire dans une boucle ?
pour la premiere class ce code fonctionne , mais ensuite ...
20 févr. 2023 à 10:54
j'ai essayé avec ceci mais alors cela affiche toutes les class panel