J'essaye de changer une image et le texte à l'intérieur d'un h2 en utilisant onmouseover
et onmouseout
, comme dans ce gif
Je donne quelques exemples ci-dessous où je peux changer l'image avec onmouseover
et onmouseout
en utilisant soit this code > ou
document.getElementById
, mais lorsque j'utilise this
, je ne peux pas comprendre comment changer simultanément le texte à l'intérieur de la balise h2 (comme dans l'exemple sous document.getElementById
). L'utilisation de l'extrait de code suivant ne modifie pas l'image.
<h2>ICE 14: Drake the Duck</h2> <img id="duck" src="https://i.imgur.com/G8TcUqA.jpg" onmouseover='this.src="https://i.imgur.com/dsF2mgL.jpg"' onmouseout='this.src="https://i.imgur.com/PKi5s3p.jpg"' > <h2 id="message">I am Drake the Duck.</h2>
Je cherche un moyen d'utiliser this
et de modifier à la fois l'image et le texte à l'intérieur le h2
Utilisation des données Utilisation de document.getElementById
^^/p> <h2>ICE 14: Drake the Duck</h2>
<img
id="duck"
src="https://i.imgur.com/G8TcUqA.jpg"
onmouseover='(function(){
//this.src="./duck2.jpg"
document.getElementById("duck").src="https://i.imgur.com/dsF2mgL.jpg"
document.getElementById("message").innerHTML="I am so very tired"
})()'
onmouseout='(function(){
document.getElementById("duck").src="https://i.imgur.com/PKi5s3p.jpg"
document.getElementById("message").innerHTML="Now I am wide awake!"
})()'
>
<h2 id="message">I am Drake the Duck.</h2>
this
onmouseover='(function(){
this.src="https://i.imgur.com/dsF2mgL.jpg"
document.getElementById("message").innerHTML="I am so very tired"
})()'
3 Réponses :
N'utilisez pas un IIFE dans l'attribut onclick
, car ce
n'est pas hérité par les fonctions (sauf si vous utilisez une fonction fléchée). Vous pouvez simplement mettre le code directement dans l'attribut onclick
sans l'encapsuleur de fonction.
<h2>ICE 14: Drake the Duck</h2> <img id="duck" src="https://i.imgur.com/G8TcUqA.jpg" onmouseover='this.src="https://i.imgur.com/dsF2mgL.jpg"; document.getElementById("message").innerHTML="I am so very tired"' onmouseout='this.src="https://i.imgur.com/PKi5s3p.jpg"; document.getElementById("message").innerHTML="Now I am wide awake!"'> <h2 id="message">I am Drake the Duck.</h2>
Le mot-clé this seul ne vous mènera pas loin car il ne s'agit que d'une référence à l'élément qui a provoqué l'événement, c'est-à-dire l'élément
dans votre cas.
Cependant, si l'élément
est toujours le frère suivant après votre
, vous pouvez interroger la propriété .nextElementSibling de l'image pour obtenir une référence au
et attribuer le texte.
Voici un exemple:
<h2>ICE 14: Drake the Duck</h2> <img id="duck" src="https://i.imgur.com/G8TcUqA.jpg" onmouseover='this.src="https://i.imgur.com/dsF2mgL.jpg";this.nextElementSibling.innerHTML="Now I am wide awake!"' onmouseout='this.src="https://i.imgur.com/PKi5s3p.jpg";this.nextElementSibling.innerHTML="I am so very tired!"'> <h2 id="message">I am Drake the Duck.</h2>
utilisez le sélecteur nextElementSibling
pour l'afficher
<h2>ICE 14: Drake the Duck</h2> <img id="duck" src="https://i.imgur.com/G8TcUqA.jpg" onmouseover='this.src="https://i.imgur.com/dsF2mgL.jpg" nextElementSibling.textContent="I am so very tired"' onmouseout='this.src="https://i.imgur.com/PKi5s3p.jpg" nextElementSibling.textContent="Now I am wide awake!"'> <h2 id="message">I am Drake the Duck.</h2>
Vous ne voulez certainement pas de
getElementById
. Lorsque le navigateur déclenche l'événement, il vous transmet un objet événement afin que vous n'ayez pas besoin dececi
non plus.fonction (événement) {var img = event.target; var h2 = img.previousSibling;}
. Le problème avec cette méthode de récupération du H2 est qu'elle est brutale. Si votre structure de balisage change, elle échouera@rayhatfield C'est dans l'exemple sous 'Utilisation de
this
'