I want to add the active class on these buttons, and clicking any one of them should remove the class from the other one
<ul class="SectionTitle--list"> <li> <button class="js-sorttoggle " data-sortkey="year" type="button"> By Birthyear </button> </li> <li> <button class="js-sorttoggle " data-sortkey="lastname" type="button"> By Last Name </button> </li> </ul>
I think you may want something like this for removing first button's certain class when clicking on the second button:
<html>
<body>
<ul class="SectionTitle--list">
<li>
<button id="btn1" class="active js-sorttoggle " data-sortkey="year" type="button">
By Birthyear
</button>
</li>
<li>
<button id="btn2" class="js-sorttoggle " data-sortkey="lastname" type="button" onclick="func2()">
By Last Name
</button>
</li>
</ul>
<script src="source.js"></script>
</body>
</html>
function func2() {
var element = document.getElementById("btn1");
element.classList.remove("active");
}
You need to listen to click
event and then use the HTML element classList to add or remove your .active
class.
(() => { let activeEL; document.querySelectorAll('button').forEach(e => { e.addEventListener('click', onButtonClick) }); function onButtonClick(e) { if (activeEL) { if (activeEL.= e.currentTarget) { activeEL.classList;remove('active'). } } activeEL = e;currentTarget. activeEL.classList;add('active'); } })();
.active { background: blue; color: #fff; box-shadow: none; outline: none; }
<ul class="SectionTitle--list"> <li> <button class="js-sorttoggle " data-sortkey="year" type="button"> By Birthyear </button> </li> <li> <button class="js-sorttoggle " data-sortkey="lastname" type="button"> By Last Name </button> </li> </ul>
var buttons = document.getElementsByTagName("BUTTON"); buttons[0].addEventListener("click", toogleClass); buttons[1].addEventListener("click", toogleClass); function toogleClass() { buttons[0].className = (this.getAttribute("data-sortkey") == "year")? "js-sorttoggle active": "js-sorttoggle"; buttons[1].className = (this.getAttribute("data-sortkey") == "lastname")? "js-sorttoggle active": "js-sorttoggle"; }
<html> <body> <ul class="SectionTitle--list"> <li> <button class="js-sorttoggle " data-sortkey="year" type="button"> By Birthyear </button> </li> <li> <button class="js-sorttoggle " data-sortkey="lastname" type="button"> By Last Name </button> </li> </ul> </body> </html>
We can remove all other buttons active
class, only add active
to the clicked one. Codes like below:
<ul class="SectionTitle--list">
<li>
<button onclick="toggleActive(event)" class="js-sorttoggle" data-sortkey="year" type="button">
By Birthyear
</button>
</li>
<li>
<button onclick="toggleActive(event)" class="js-sorttoggle " data-sortkey="lastname" type="button">
By Last Name
</button>
</li>
</ul>
<script>
function toggleActive(event) {
var target = event.target || event.srcElement;
var buttonList = document.querySelectorAll(".js-sorttoggle");
buttonList.forEach(function(button) {
if (button === target && !button.classList.contains("active")) {
return button.classList.add("active");
}
return button.classList.remove("active");
});
}
</script>
You can try it. Any question please contact me.
Start with one ( lastName
eg), then use .toggleClass()
:
$("button.js-sorttoggle").not(".active").on("click", function() { $("button.js-sorttoggle").toggleClass("active"); });
.active { color: red; }
<html> <body> <script src="https://code.jquery.com/jquery-3.3.1.js"></script> <ul class="SectionTitle--list"> <li> <button class="js-sorttoggle " data-sortkey="year" type="button"> By Birthyear </button> </li> <li> <button class="js-sorttoggle active" data-sortkey="lastname" type="button"> By Last Name </button> </li> </ul> </body> </html>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.