Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to select element by 'role' attribute and filter by class with vanilla JS?

Markup:

<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>

When I use document.querySelectorAll('[role="presentation"]'); the result is array [li.active,li,li]

How can I remove .active class and attach it to any other of these li with plain JS w/o JQuery the more simplest way?

like image 676
mixa_ru Avatar asked Oct 09 '17 14:10

mixa_ru


Video Answer


1 Answers

Try this:

// 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' will not work in IE9;
  • I think you have to modify adding class row, depending on your needs.
like image 142
Anton Vovchenko Avatar answered Sep 28 '22 02:09

Anton Vovchenko