2017-04-13 11 views
0

クラスにイベントリスナーを適用する際に問題があります。私はIDを使用しようとすると、それは動作しますが、クラスで試しても何も起こりません。 私は4つのdivを持っています。私はクリックしたものを変更したいが、変更せずに他の3つを保持する。 可能ですか?Javascript:クラスにイベントリスナーを適用できませんか?

HTML

<div class="card"> 
    - 6 pièces, dont 3 aveugles. 
    - Cuisine - électroménagers intégrés. 
    - 2 salles de bains modernes. 
</div> 
<div id="ui" class="card"> 
    - 6 pièces, dont 3 aveugles. 
    - Cuisine - électroménagers intégrés. 
    - 2 salles de bains modernes. 
</div> 
<div class="card"> 
    - 6 pièces, dont 3 aveugles. 
    - Cuisine - électroménagers intégrés. 
    - 2 salles de bains modernes. 
</div> 
<div class="card"> 
    - 6 pièces, dont 3 aveugles. 
    - Cuisine - électroménagers intégrés. 
    - 2 salles de bains modernes. 
</div> 

CSS

.card { 
    height: 100px; 
    width: 245px; 
    float: left; 
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); 
    font-size: 0.85em; 
    line-height: 1.5em; 
    margin: 15px; 
    overflow: hidden; 
    border-radius: 5px; 
    } 

.expandCard { 
    height:500px; 
    width: 245px; 
    float: left; 
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); 
    font-size: 0.85em; 
    line-height: 1.5em; 
    margin: 15px; 
    border-radius: 5px; 
} 

JS 、これは動作しません

これはID( "UI")

を持つ要素のために働く
var teste = document.getElementsByClassName("card"); 
teste.addEventListener("click", function changeSize() { 
    teste.className = "expandCard"; 
}); 

var teste = document.getElementByID("ui"); 

teste.addEventListener("click", function changeSize() { 
    teste.className = "expandCard"; 
}); 
+0

'getElementsByClassName'は、ノード・リストではなく、個々のノードを返します。 –

+0

"getElementsByClassName"はHTMLコレクションを返します –

+0

要素が何であるか、そしてクラスとIDが要素を見つける方法であることを知る必要があります。 – Quentin

答えて

1

getElementsByClassNameは、配列のようなオブジェクトを返します。 Array.fromメソッドを使用して配列に変更することができます。次に、Array#forEachを使用して、イベントリスナーをすべての要素にバインドします。

var teste = document.getElementsByClassName("card"); 
 

 
Array.from(teste).forEach(v => v.addEventListener("click", function() { 
 
    this.classList.toggle('expandCard'); 
 
}));
.card { 
 
    height: 100px; 
 
    width: 245px; 
 
    float: left; 
 
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); 
 
    font-size: 0.85em; 
 
    line-height: 1.5em; 
 
    margin: 15px; 
 
    overflow: hidden; 
 
    border-radius: 5px; 
 
} 
 

 
.expandCard { 
 
    height: 500px; 
 
    width: 245px; 
 
    float: left; 
 
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); 
 
    font-size: 0.85em; 
 
    line-height: 1.5em; 
 
    margin: 15px; 
 
    border-radius: 5px; 
 
}
<div class="card"> 
 
    - 6 pièces, dont 3 aveugles. - Cuisine - électroménagers intégrés. - 2 salles de bains modernes. 
 
</div> 
 
<div id="ui" class="card"> 
 
    - 6 pièces, dont 3 aveugles. - Cuisine - électroménagers intégrés. - 2 salles de bains modernes. 
 
</div> 
 
<div class="card"> 
 
    - 6 pièces, dont 3 aveugles. - Cuisine - électroménagers intégrés. - 2 salles de bains modernes. 
 
</div> 
 
<div class="card"> 
 
    - 6 pièces, dont 3 aveugles. - Cuisine - électroménagers intégrés. - 2 salles de bains modernes. 
 
</div>

+0

あなたのソリューションは機能しましたが、すべてを理解できませんでした。だから私は何をしているのか理解できるように、より良い方法を掘りに行きました。ここに私の解決策があります。 for(var i = 0; i = teste.length; i ++){ teste [i] .addEventListener( "click"、function(){ this.classList.toggle( "expandCard"); }); } ' – fields

+0

@fields' forEach'は 'for'ループと同じようにsimillarで動作します。ドキュメントを見るだけで、とても簡単です。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach –

+0

はい、わかります。しかし、私はこれを発見しました:)(https://coderwall.com/p/kvzbpa/don-t-use-array-foreach-use-for-instead) – fields

関連する問題