javascript:将classList替换为条件

Posted

技术标签:

【中文标题】javascript:将classList替换为条件【英文标题】:javascript: replace classList that is into a conditional 【发布时间】:2018-05-17 21:42:51 【问题描述】:

我想随时更改 div 的类,不管它有什么类。如果 div 有“mystyle”类,我希望它变成“mystyle1”,反之亦然。我的代码是这样的:

<!DOCTYPE html>
<html>
<head>
<style>
.mystyle 
    width: 300px;
    height: 50px;
    background-color: coral;
    color: white;
    font-size: 25px;


.mystyle1 
    width: 100px;
    height: 100px;
    background-color: black;
    color: coral;
    font-size: 30px;

</style>
</head>
<body>

<p>Click the button to change the style class from DIV.</p>

<button onclick="myFunction()">Try it</button>

<div id="myDIV" class="mystyle">
I am a DIV element
</div>

<script>
function myFunction() 
    var x = document.getElementById("myDIV");

    if (x.classList.contains("mysyle")) 
        x.classList.replace("mystyle", "mystyle1");
     if (x.classList.contains("mysyle1")) 
        x.classList.replace("mystyle1", "mystyle");
    

</script>

</body>
</html>

当我们按下按钮时,它必须随时更改 css 样式。但事实并非如此。 我认为问题与条件(classList.contains)和classList.replace的混合有关,因为我是单独做的并且它有效。

你知道我的问题是什么吗?谢谢。

【问题讨论】:

你在这里拼错了 :if (x.classList.contains("mysyle")) x.classList.replace("mystyle", "mystyle1"); if (x.classList.contains("mysyle1")) x.classList.replace("mystyle1", "mystyle"); 现在试试,我刚刚更正了它 【参考方案1】:

几件事:

    你会在 x.classList.contains() 中拼错 mystyle; 您的第二个 if 语句应该是 else-if。这是因为它更改了类,并再次检查新类,从而重置它。

<!DOCTYPE html>
<html>
<head>
<style>
.mystyle 
    width: 300px;
    height: 50px;
    background-color: coral;
    color: white;
    font-size: 25px;


.mystyle1 
    width: 100px;
    height: 100px;
    background-color: black;
    color: coral;
    font-size: 30px;

</style>
</head>
<body>

<p>Click the button to change the style class from DIV.</p>

<button onclick="myFunction()">Try it</button>

<div id="myDIV" class="mystyle">
I am a DIV element
</div>

<script>
function myFunction() 
    var x = document.getElementById("myDIV");

    if (x.classList.contains("mystyle")) 
        x.classList.replace("mystyle", "mystyle1");
     else if (x.classList.contains("mystyle1")) 
        x.classList.replace("mystyle1", "mystyle");
    

</script>

</body>
</html>

【讨论】:

你是对的。我修复了我的代码,但它仍然无法正常工作。当我运行它时出现这个错误:错误:“消息”:“脚本错误。”,“文件名”:“”,“lineno”:0,“colno”:0我不知道它是什么意思 【参考方案2】:

这是你的代码..

    <!DOCTYPE html>
<html>
<head>
<style>
.mystyle 
    width: 300px;
    height: 50px;
    background-color: coral;
    color: white;
    font-size: 25px;


.mystyle1 
    width: 100px;
    height: 100px;
    background-color: black;
    color: coral;
    font-size: 30px;

</style>
</head>
<body>

<p>Click the button to change the style class from DIV.</p>

<button onclick="myFunction()">Try it</button>

<div id="myDIV" class="mystyle">
I am a DIV element
</div>

<script>
function myFunction() 
    var x = document.getElementById("myDIV");

    /*Here you missspelled "mystyle"*/
    if (x.classList.contains("mystyle")) 
        x.classList.replace("mystyle", "mystyle1");
     else if (x.classList.contains("mystyle1")) 
        x.classList.replace("mystyle1", "mystyle");
    

</script>

</body>
</html>

【讨论】:

提供一些关于您的答案以及它如何/为什么可以解决问题的见解总是一个好主意。 你是对的。我修复了我的代码,但它仍然无法正常工作。【参考方案3】:

我不确定您使用的是哪个浏览器,但我注意到 Internet Explorer 的 classList.replace 存在问题。 对我有用的是逐个删除和添加类。

干杯!

【讨论】:

以上是关于javascript:将classList替换为条件的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript“classList”切换不会切换元素的类名

Javascript-className与classList的区别

使用 javascript 进行表单验证 - event.target.form.classList 未定义 - css 技巧教程

[Javascript] Manipulate the DOM with the classList API

JavaScript计数器+classList使用-纯js案例:全选反选

未捕获的类型错误:无法在方法中读取 null 的属性“classList”