[英]How to add and remove active class between two button in a list?
I want to add the active class on these buttons, and clicking any one of them should remove the class from the other one我想在这些按钮上添加活动的 class,然后单击其中任何一个按钮都应该从另一个按钮中删除 class
<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:我想你可能想要这样的东西来删除第一个按钮的某些 class 单击第二个按钮时:
<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.您需要监听
click
事件,然后使用HTML 元素 classList添加或删除您的.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.我们可以删除所有其他
active
的按钮 class,只将active
添加到单击的那个。 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()
:从一个开始(例如
lastName
),然后使用.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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.