前提・実現したいこと
特定のクラスを持つ要素にマウスカーソルが乗った時、
その要素のCSSが変化するようなjavascriptを書きたいです。
発生している問題・エラーメッセージ
あらかじめ要素にIDを付与した場合うまくいきますが、
CLASSを付与した場合は何も起こりません。
html
1<div class="elem">マウスポインターを乗せると色が変わります</div>
javascript
1document.addEventListener('DOMContentLoaded', function() { 2 let elem = document.getElementsByClassName('elem') 3 4 //マウスポインターが乗ったタイミングで背景色を変更 5 elem.addEventListener('mouseover', function() { 6 this.style.backgroundColor = 'Yellow' 7 }, false) 8 9 //マウスポインターが外れたタイミングで背景色を戻す 10 elem.addEventListener('mouseout', function() { 11 this.style.backgroundColor = '' 12 }, false) 13}, false)
試したこと
下記だとうまくいきます。
html
1<div id="elem">マウスポインターを乗せると色が変わります</div>
javascript
1 2document.addEventListener('DOMContentLoaded', function() { 3 let elem = document.getElementById('elem') 4 5 //マウスポインターが乗ったタイミングで背景色を変更 6 elem.addEventListener('mouseover', function() { 7 this.style.backgroundColor = 'Yellow' 8 }, false) 9 10 //マウスポインターが外れたタイミングで背景色を戻す 11 elem.addEventListener('mouseout', function() { 12 this.style.backgroundColor = '' 13 }, false) 14}, false)
トリガーとなる要素に指定されているのがIDだとうまくいくのに、クラスだとうまくいかない状況です。
document.getElementsByClassNameという書き方はよくないのでしょうか?
知恵を貸していただきたいです。
試したこと追記
getElementsByClassNameは配列ライクなオブジェクトを返します。
という回答をほかの質問で見ました。(https://teratail.com/questions/87978)
ということは、[0]をどこかに書かなければいけないのでは?
と思いコードを下記のようにしましたが、何も起こりませんでした。
javascript
1document.addEventListener('DOMContentLoaded', function() { 2 let elem = document.getElementsByClassName('elem') 3 4 //マウスポインターが乗ったタイミングで背景色を変更 5 elem[0].addEventListener('mouseover', function() { 6 this.style.backgroundColor = 'Yellow' 7 }, false) 8 9 //マウスポインターが外れたタイミングで背景色を戻す 10 elem[0].addEventListener('mouseout', function() { 11 this.style.backgroundColor = '' 12 }, false) 13}, false)
elem[0].addEventListener
もダメ見たいです。
[0]を書くべき場所が他にあるのでしょうか
回答1件
あなたの回答
tips
プレビュー