JavaScript 标签替换 class
JavaScript Tabs replace class
我在 CSS 中为每个选项卡创建了不同的 classes 并为每个选项卡添加了样式 - 背景颜色。我编写了一个 JavaScipt 代码来遍历每个选项卡并显示该选项卡的适当内容。
在我的 CSS 中,我还创建了另一个 class (.now-active) 并添加了样式 - 活动选项卡的背景颜色(在 class .now-active ) 将由我的 JavaScript 代码调用和使用。到目前为止一切正常。
问题:我希望上面.now-active class中的背景颜色样式(仅由我的JavaScript onClick 函数调用)替换初始样式(背景-当前活动选项卡的颜色)。
这是我的 CSS class 每个选项卡:
/* Set CSS property for every button */
.tab button.all{
background-color: #fff !important;
color: #000 !important;
}
.tab button.assessment{
background-color: #616161 !important;
color: #fff !important;
}
.tab button.games{
background-color: #00bcd4 !important;
color: #000 !important;
}
.tab button.assignment{
background-color: #607d8b !important;
color: #fff !important;
}
.tab button.practice{
background-color: #009688 !important;
color: #fff !important;
}
这是 JavaScript 代码要使用的活动标签的 CSS:
/* Create an active/current tablink class */
.tab button.now-active {
background-color: green;
}
这是我的JavaScript操作标签的代码:
function openTab(evt, Tab) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" now-active", "");
}
var now_active = document.getElementsByClassName("now-active");
document.getElementById(Tab).style.display = "block"
evt.currentTarget.className += " now-active";
}
// Get the element with id="defaultOpen" and click on it
document.getElementById("defaultOpen").click();
最后这是我的 HTML:
<div class="penfs-bar hover-text tab penfs-hide-small penfs-hide-medium">
<button class="tablinks all" onclick="openTab(event, 'All')" id="defaultOpen" style="width:20%">
<p class="penfs-text-blue">View All</p>
</button>
<button class="tablinks assessment" onclick="openTab(event, 'Assessment')" style="width:20%">
<p class="penfs-text-white">Assessment</p>
</button>
<button class="tablinks games" onclick="openTab(event, 'Games')" style="width:20%">
<p class="penfs-text-white">Play Games</p>
</button>
<button class="tablinks assignment" onclick="openTab(event, 'Assignment')" style="width:20%">
<p class="penfs-text-white">Assignment</p>
</button>
<button class="tablinks practice" onclick="openTab(event, 'Practice')" style="width:20%">
<p class="penfs-text-white">Practice</p>
</button>
</div>
我尝试过的方法:split()、replace()、removeClass().. 可能我使用的方式不对。
请帮忙解决这个问题??
有几件事对你不利:
openTab 函数中的第二项('Assignment'、'Practice')区分大小写——将其更改为小写将使文档获得正确的元素。
活跃的 class 名称没有使用 !important 属性,而其他所有内容都在使用。
- getElementsByClassName 创建一个类似数组的对象,因此您需要遍历该对象或管理状态,以便通过如下方式只有 1 个项目:
var clickedElement = document.getElementsByClassName(Tab)[0];
我剥离了所有其他内容并将其放入 codePen 中——希望这对您有所帮助:
function openTab(evt, Tab) {
var previousElement = document.getElementsByClassName('now-active')[0];
var clickedElement = document.getElementsByClassName(Tab)[0];
if(previousElement){
previousElement.classList.remove('now-active');
}
clickedElement.classList.add('now-active');
}
我在 CSS 中为每个选项卡创建了不同的 classes 并为每个选项卡添加了样式 - 背景颜色。我编写了一个 JavaScipt 代码来遍历每个选项卡并显示该选项卡的适当内容。
在我的 CSS 中,我还创建了另一个 class (.now-active) 并添加了样式 - 活动选项卡的背景颜色(在 class .now-active ) 将由我的 JavaScript 代码调用和使用。到目前为止一切正常。
问题:我希望上面.now-active class中的背景颜色样式(仅由我的JavaScript onClick 函数调用)替换初始样式(背景-当前活动选项卡的颜色)。
这是我的 CSS class 每个选项卡:
/* Set CSS property for every button */
.tab button.all{
background-color: #fff !important;
color: #000 !important;
}
.tab button.assessment{
background-color: #616161 !important;
color: #fff !important;
}
.tab button.games{
background-color: #00bcd4 !important;
color: #000 !important;
}
.tab button.assignment{
background-color: #607d8b !important;
color: #fff !important;
}
.tab button.practice{
background-color: #009688 !important;
color: #fff !important;
}
这是 JavaScript 代码要使用的活动标签的 CSS:
/* Create an active/current tablink class */
.tab button.now-active {
background-color: green;
}
这是我的JavaScript操作标签的代码:
function openTab(evt, Tab) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" now-active", "");
}
var now_active = document.getElementsByClassName("now-active");
document.getElementById(Tab).style.display = "block"
evt.currentTarget.className += " now-active";
}
// Get the element with id="defaultOpen" and click on it
document.getElementById("defaultOpen").click();
最后这是我的 HTML:
<div class="penfs-bar hover-text tab penfs-hide-small penfs-hide-medium">
<button class="tablinks all" onclick="openTab(event, 'All')" id="defaultOpen" style="width:20%">
<p class="penfs-text-blue">View All</p>
</button>
<button class="tablinks assessment" onclick="openTab(event, 'Assessment')" style="width:20%">
<p class="penfs-text-white">Assessment</p>
</button>
<button class="tablinks games" onclick="openTab(event, 'Games')" style="width:20%">
<p class="penfs-text-white">Play Games</p>
</button>
<button class="tablinks assignment" onclick="openTab(event, 'Assignment')" style="width:20%">
<p class="penfs-text-white">Assignment</p>
</button>
<button class="tablinks practice" onclick="openTab(event, 'Practice')" style="width:20%">
<p class="penfs-text-white">Practice</p>
</button>
</div>
我尝试过的方法:split()、replace()、removeClass().. 可能我使用的方式不对。
请帮忙解决这个问题??
有几件事对你不利:
openTab 函数中的第二项('Assignment'、'Practice')区分大小写——将其更改为小写将使文档获得正确的元素。
活跃的 class 名称没有使用 !important 属性,而其他所有内容都在使用。
- getElementsByClassName 创建一个类似数组的对象,因此您需要遍历该对象或管理状态,以便通过如下方式只有 1 个项目:
var clickedElement = document.getElementsByClassName(Tab)[0];
我剥离了所有其他内容并将其放入 codePen 中——希望这对您有所帮助:
function openTab(evt, Tab) {
var previousElement = document.getElementsByClassName('now-active')[0];
var clickedElement = document.getElementsByClassName(Tab)[0];
if(previousElement){
previousElement.classList.remove('now-active');
}
clickedElement.classList.add('now-active');
}