如何动态更改 HTML 标签的 CSS 类?

Posted

技术标签:

【中文标题】如何动态更改 HTML 标签的 CSS 类?【英文标题】:How to dynamically change CSS class of an HTML tag? 【发布时间】:2014-04-29 21:25:36 【问题描述】:

我正在使用 javascript。我有一个变量var boolVal,其计算结果为true/false。在我的页面上,我有一个<div> 标签:

<div id='div1' class="redClass"></div>

根据var boolVal的值,我想把&lt;div&gt;标签的CSS类改成blueClass

例如:当前类使&lt;div&gt;颜色为红色,那么新类应在运行时使页面变为蓝色,而无需刷新页面。

我们可以用简单的 JavaScript 来实现吗?我们可以使用

document.getElementById("MyElement").className = "MyClass";

或者我们应该使用AddClass

【问题讨论】:

【参考方案1】:

您可以像这样在 DOM 元素上编辑内联样式(本例中为高度):

document.getElementById("element").style.height = height + "px";

基本语法是:

document.getElementById("div1").style.[style property] = [value];

样式属性的语法可能会有所不同,并且可能与 CSS 文件中的语法不完全相同。例如,CSS 文件中的background-color 在上例中将是“backgroundColor”。

【讨论】:

【参考方案2】:

您可以使用classList API 动态添加基于id 的CSS 类,如下所示:

document.getElementById('idOfElement').classList.add('newClassName');

还是老办法:

document.getElementById('idOfElement').className = 'newClassName';
// += to keep existing classes

您也可以使用下面显示的其他 DOM 查询方法来查找元素。最后三个返回一个集合,因此您必须对其进行迭代并将类应用于集合中的每个元素(类似于下面给出的示例)。

querySelector

querySelectorAll

elements.forEach(element => element.classList.add('newClassName'));

getElementsByClassName

Array.from(elements).forEach(element => element.classList.add('newName'));

getElementsByTagName

Array.from(elements).forEach(element => element.classList.add('newName'));

你的情况

var element = document.getElementById('div1');
if(boolVal)
   element.className= 'blueClass'; // += ' blueClass'; to keep existing classes
else
   element.className= 'redClass';

【讨论】:

【参考方案3】:

类似这样的:

document.getElementById("MyElement").className = boolVal ? "redClass" : "blueClass";

【讨论】:

【参考方案4】:

你应该使用:

    boolVal.onchange=function()
                document.getElementById("MyElement").className = boolVal ? "redClass" : "blueClass";
    ;

【讨论】:

【参考方案5】:

使用

document.getElementById('div1').className='blueClass';

【讨论】:

只需使用className= 即可清除其他类。【参考方案6】:

首先,AddClass 不是纯 Javascript 方法。它与jQuery有关。

You can use Javascript for adding a class:

setAttributeclassName 这两个方法都用于设置类(类属性),这些方法不用于在现有的类中添加另一个类。

document.getElementById('div1').setAttribute( "class", "blueClass" );

document.getElementById('div1').className="redClass";

Demo Fiddle

因此,如果您想将 css 类附加到元素,您可以这样做 -

 document.getElementById('div1').setAttribute( "class", document.getElementById('div1').getAttribute('class') + " blueClass" );

 document.getElementById('div1').className +=" redClass";

注意:使用这种方式,可以多次添加同一个类。使用javascript完成这项工作只是一个技巧,它不是一个完美的解决方案

或者简单地使用 jQuery 添加类 -

$("#div1").addClass("blueClass");

Working Fiddle

【讨论】:

以上是关于如何动态更改 HTML 标签的 CSS 类?的主要内容,如果未能解决你的问题,请参考以下文章

VueJS:如何在滚动位置后动态更改 CSS 类

html中,如何动态显示几个图片,就是从左到右依次显示5张图片

如何使用 css 和/或 javascript 动态更改样式

使用相同 CSS 的不同 div 标签 - 我该如何更改?

如何在角度2中动态更改css类名

将父元素悬停到子标签元素后如何更改相同的css样式?