Javascript 启动时,活动选项卡文本不随页面加载而更改

Javascript 启动时,活动选项卡文本不随页面加载而更改,javascript,css,html,Javascript,Css,Html,“我的选项卡”文本颜色未随页面加载而更改。默认活动选项卡的背景颜色随加载而改变,但文本仍保持相同的颜色 body {font-family: "Lato", sans-serif;} ul.tab { list-style-type: none; margin: auto; padding: auto; overflow: hidden; border: 1px solid #ccc; color: #ffffff; float: cen

“我的选项卡”文本颜色未随页面加载而更改。默认活动选项卡的背景颜色随加载而改变,但文本仍保持相同的颜色

body {font-family: "Lato", sans-serif;}

ul.tab {
    list-style-type: none;
    margin: auto;
    padding: auto;
    overflow: hidden;
    border: 1px solid #ccc;
    color: #ffffff;
    float: center;
}

/* Float the list items side by side */
ul.tab li {float: left;}

/* Style the links inside the list items */
ul.tab li a {
    display: inline-block;
    color: #74cfff;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
    transition: 0.3s;
    font-size: 17px;
}

/* Change background color of links on hover */
ul.tab li a:hover {
    background-color: #ededed;
}

/* Create an active/current tablink class */
ul.tab li a:focus, .active {
    color: #fff;
    background-color: #74CFFF;

}

/* Style the tab content */
.tabcontent {
    display: none;
    padding: 6px 12px;
    border: 1px solid #ccc;
    border-top: none;   
}
这是我的java脚本代码

  <script>
    function openCity(evt, cityName) {
    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(" active", "");
    }
        document.getElementById(cityName).style.display = "block";
        evt.currentTarget.className += " active";
    }

    // Get the element with id="defaultOpen" and click on it
    document.getElementById("defaultOpen").click();
</script>
下面是HTML代码。默认情况下,Tab1是选中的选项卡。所以它的颜色和文字应该改变。但不是像我想的那样工作。所选选项卡背面颜色应为“75cfff”,字体颜色应为“ffffff”。如果我选择的不是同一个第一个选项卡,而是其他选项卡,则文本应变为白色,背景色应变为“75cfff”

<ul class="tab">
  <li><a href="javascript:void(0)" class="tablinks" onclick="openCity(event, 'tab1')" id="defaultOpen" >tab1 <img src="assets/images/infoico.png" width="20" height="20"></a></li>
  <li><a href="javascript:void(0)" class="tablinks" onclick="openCity(event, 'tab2')">tab2 <img src="assets/images/infoico.png" width="20" height="20"></a></li>
  <li><a href="javascript:void(0)" class="tablinks" onclick="openCity(event, 'tab3')">tab3 <img src="assets/images/infoico.png" width="20" height="20"></a></li>
                    </ul>

<div id="tab1" class="tabcontent">
    <div style="border-bottom: thin solid #f1f1f1;" >
    <p> tab1</p>
    </div>                              
</div>
<div id="tab2" class="tabcontent">
    <div style="border-bottom: thin solid #f1f1f1;" >
    <p> tab2</p>
    </div>                              
</div>
<div id="tab3" class="tabcontent">
    <div style="border-bottom: thin solid #f1f1f1;" >
    <p> tab3</p>
    </div>                              
</div>

问题在于css。 如果在启动时检查html元素的状态,您会注意到

活动选项卡的样式设置不正确

ul.tab li a将颜色设置回相同的蓝色,因此文本不可读。 单击脚本中的元素后,链接再次失去焦点,因此设置文本的是.active css。但是由于css规则.active的权重低于规则ul.tab li a,因此除非元素保持聚焦,否则永远无法获得颜色


我会删除ul.tab li a中的颜色,并为其使用单独的类,这样您就不会有css权重的问题。你可以加上!相反,这很重要,但这是一个更快但更糟糕的解决方案。

您的代码为我提供了错误信息。document.getElementByIdcityName.style.display,但CityName实际上没有id tab1、tab2、Tab3。我想你只需要用class=tabcontent进行除法,并传递这三个选项卡名称,因为idI在我的代码中已经有了,我忘了在这里发布。我用tabe内容更新我的问题。这只是一个特殊性问题。ul.tab li a比.active具有更高的特异性-因此第一个选择器的颜色定义“获胜”。使您的第二个选择器至少与第一个选择器一样特异。谢谢,使用更糟糕的解决方案没有问题,但效果很好。