2017-10-09 1 views
-1

Markup:Comment sélectionner un élément par l'attribut 'role' et filtrer par classe avec JS vanilla?

<ul> 
    <li role="presentation" class="active"> 
    <a href="#1" aria-controls="1" role="tab">How to Install for iPad</a> 
    </li> 
    <li role="presentation"> 
    <a href="#2" aria-controls="2" role="tab">How to Install for Mac</a> 
    </li> 
    <li role="presentation"> 
    <a href="#3" aria-controls="3" role="tab">How to Install for PC</a> 
    </li> 
</ul> 

Lorsque j'utilise document.querySelectorAll ('[role = "présentation"]'); le résultat est un tableau [li.active, li, li]

Comment puis-je supprimer la classe .active et l'attacher à un autre de ces li avec JS plaine w/o JQuery plus façon la plus simple?

+0

S'il vous plaît inclure un [mcve] de ce que vous avez essayé. Ce que vous avez ici, c'est un ordre de travail, pas une question. – zzzzBov

+0

Qu'essayez-vous exactement d'accomplir? Votre question donne l'impression que vous voulez déplacer la classe '.active' de façon aléatoire sur l'un des autres éléments' li', mais je suppose que ce n'est pas ce que vous voulez vraiment? –

+0

@ JamesDonnelly, merci pour votre réponse! Mon but est de désactiver .Active depuis le premier li et de le mettre en place jusqu'au dernier élément. –

Répondre

1

Essayez ceci:

// remove active class from all elements 
document.querySelectorAll('[role="presentation"]').forEach(function (el){ 
el.classList.remove("active"); 
}); 

// add class 'active' to last element 
document.querySelectorAll('[role="presentation"]:last-of-type')[0].classList.add("active") 

Notes:

  • 'classList' ne fonctionne pas dans IE9;
  • Je pense que vous devez modifier la ligne de classe en fonction de vos besoins.
1

Vous pouvez essayer quelque chose comme ceci:

var ele = document.querySelectorAll('[role="presentation"]'); 
ele[0].classList.remove("active"); //Remove active class for first element 
ele[ele.length- 1].classList.add("active"); //Apply active class for last element 
console.log(ele)