2016-06-14 2 views
1

Ich habe einen Akkordeon-Code von W3Schools, aber ich möchte eine Klasse von icon <i> ersetzen. Wie kann ich switchClass() eines Elements innerhalb this auf diesen Code?Toggle die Klasse eines anderen Elements in 'dies'

-Code von W3Schools:

var acc = document.getElementsByClassName("course-row"); 
var i; 

for (i = 0; i < acc.length; i++) { 
    acc[i].onclick = function(){ 
     this.classList.toggle("active"); 
     this.nextElementSibling.classList.toggle("unit-row-hide"); 
    } 
} 

Mein HTML:

<div class="row-history"> 
    <div class="row course-row active"> 
     <div class="course-name col-md-4"> 
      <i class="fa fa-caret-right" aria-hidden="true"></i> 
      <a href="https://www.xxx.com.br/curso-teste-4">Curso Teste 4</a> 
     </div> 
     <div class="course-progress col-md-2"> 
      <div class="course-progress-bar-wrapper col-md-8"> 
       <div class="course-progress-bar">&nbsp;</div> 
      </div> 
      <div class="course-progress-percent col-md-4">100%</div> 
     </div> 
     <div class="course-remaining col-md-2">Completo</div> 
     <div class="course-timestamp col-md-2">21 horas atrás</div> 
     <div class="course-remove col-md-2"><i class="fa fa-times" aria-hidden="true"></i></div> 
    </div> <!-- .course-row --> 

    <div class="unit-row"> 

     <div class="row single-unit"> 
      <div class="unit-name col-md-4"> 
       <i class="fa fa-angle-double-right" aria-hidden="true"></i> 
       Curso Teste 4 - Unidade 3 
      </div> 
      <div class="unit-nbsp col-md-4">&nbsp;</div> 
      <div class="unit-timestamp col-md-2">21 horas atrás</div> 
      <div class="unit-remove col-md-2"><i class="fa fa-times" aria-hidden="true"></i></div> 
     </div> 

    </div> <!-- .unit-row --> 
</div> 

Ich brauche die Klasse fa-caret-right<i class="fa fa-caret-right" aria-hidden="true"></i>-fa-caret-down zu ersetzen, wenn das div kollabiert ist und zurück zu fa-caret-right, wenn es nicht kollabiert ist .

+0

Also, das Problem ist, dass Sie nicht wissen, wie Sie einen Verweis auf dieses Element bekommen? –

+0

@FelixKling, ja, ich muss das '' auf 'switchClass()', aber ich muss das gleiche Skript verwenden. – William

+0

Wenn es immer das erste Enkelkind ist, können Sie 'this.children [0] .children [0]' verwenden, um darauf zu verweisen. Zuverlässiger könnte ['querySelector'] sein (https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector). Es gibt grundsätzlich zwei Möglichkeiten, einen Verweis auf ein Element zu erhalten: Tree Traversal oder Search. –

Antwort

1

Sie verwenden bereits die entsprechende Funktion: classList.toggle(). Wählen Sie einfach die <i> Element und die Funktion auf es für beide Klassen gelten:

var fa = this.getElementsByTagName("i")[0]; 
fa.classList.toggle("fa-caret-right"); 
fa.classList.toggle("fa-caret-down"); 

Die erste entfernt den Pfeil nach rechts, fügt der zweite den Pfeil nach unten. Beim nächsten Klick ist es umgekehrt (umgeschaltet).

+0

Ich habe gerade bearbeitet, weil ich gesehen habe, dass toggle() nicht auf den Rückgabewert von sich selbst verwendet werden kann, also brauchen wir eine zweite Zeile. –

+0

Danke Kumpel, es funktioniert perfekt! – William

Verwandte Themen