【发布时间】:2010-02-08 11:18:33
【问题描述】:
根据我正在阅读的书,当您使用 Javascript 时,最好按类更改 CSS。但是怎么做?有人可以为此提供一个示例 sn-p 吗?
【问题讨论】:
标签: javascript html css
根据我正在阅读的书,当您使用 Javascript 时,最好按类更改 CSS。但是怎么做?有人可以为此提供一个示例 sn-p 吗?
【问题讨论】:
标签: javascript html css
假设你有:
<div id="mydiv" class="oldclass">text</div>
以及以下样式:
.oldclass { color: blue }
.newclass { background-color: yellow }
您可以像这样在 javascript 中更改 mydiv 上的类:
document.getElementById('mydiv').className = 'newclass';
在 DOM 操作之后,您将得到:
<div id="mydiv" class="newclass">text</div>
如果你想添加一个新的css类而不删除旧的,你可以追加它:
document.getElementById('mydiv').className += ' newClass';
这将导致:
<div id="mydiv" class="oldclass newclass">text</div>
【讨论】:
document.getElementById('mydiv').className += ' newClass';,使用classList添加和删除类:document.getElementById('mydiv').classList.add('newclass');。通过这种方式,您无需在添加之前测试该类是否已经存在,add 方法将为您执行此操作。与 remove 类似,您不必在操作 className 属性之前测试一个类是否存在。您也不必记住在要添加的类前面加上空格。
classList 仅支持 IE >= 10、Chrome >= 34、Firfox >= 29 和 Safari >= 7。来源:caniuse.com/#search=classList。如果您需要对旧版浏览器的支持,请使用className。
className 比classList 更向后兼容。
如果您想操作实际的 CSS 类而不是修改 DOM 元素或使用修饰符 CSS 类,请参阅 https://stackoverflow.com/a/50036923/482916.
【讨论】:
由于 classList is supported in all major browsers 和 jQuery drops support for IE<9(在 2.x 分支中,因为 Stormblack 在评论中指出),考虑到这个 HTML
<div id="mydiv" class="oldclass">text</div>
您可以轻松地使用以下语法:
document.getElementById('mydiv').classList.add("newClass");
这也会导致:
<div id="mydiv" class="oldclass newclass">text</div>
此外,您还可以使用remove, toggle, contains 方法。
【讨论】:
add和remove。比公认的答案好得多。
使用 vanilla javascript 可以通过两种方式完成此操作。第一个是className,第二个是classList。 className 适用于所有浏览器,但在修改元素的类属性时可能难以使用。 classList 是修改元素类的更简单方法。
要直接设置元素的类属性,className 是可行的方法,否则要修改元素的类,使用classList 更容易。
初始HTML
<div id="ID"></div>
设置类属性
var div = document.getElementById('ID');
div.className = "foo bar car";
结果:
<div id="ID" class="foo bar car"></div>
添加一个类
div.classList.add("car");// Class already exists, nothing happens
div.classList.add("tar");
注意: 在添加一个类之前不需要测试它是否存在。如果需要添加一个类,只需添加它。如果已存在,则不会添加副本。
结果:
<div id="ID" class="foo bar car tar"></div>
删除一个类
div.classList.remove("car");
div.classList.remove("tar");
div.classList.remove("car");// No class of this name exists, nothing happens
注意: 就像add,如果需要删除一个类,请将其删除。如果它在那里,它将被删除,否则不会发生任何事情。
结果:
<div id="ID" class="foo bar"></div>
检查类属性是否包含特定类
if (div.classList.contains("foo")) {
// Do stuff
}
切换类
var classWasAdded = div.classList.toggle("bar"); // "bar" gets removed
// classWasAdded is false since "bar" was removed
classWasAdded = div.classList.toggle("bar"); // "bar" gets added
// classWasAdded is true since "bar" was added
.toggle 有第二个 boolean 参数,在我看来,它是多余的,不值得重复。
有关classList 的更多信息,请查看MDN。它还涵盖了browser compatibility,如果这是一个问题,可以通过使用 Modernizr 进行检测并在需要时使用 polyfill 来解决。
【讨论】:
使用className 属性:
document.getElementById('your_element_s_id').className = 'cssClass';
【讨论】:
我强烈推荐 jQuery。然后它变得如此简单:
$('#mydiv').addClass('newclass');
您不必担心删除旧类,因为 addClass() 只会附加到它。你也有 removeClass();
与 getElementById() 方法相比的另一个优点是,您可以通过一行代码将其同时应用于多个元素。
$('div').addClass('newclass');
$('.oldclass').addClass('newclass');
第一个示例将类添加到页面上的所有 DIV 元素。第二个示例将新类添加到当前具有旧类的所有元素中。
【讨论】:
您可能还对使用 jQuery 修改它感兴趣: http://api.jquery.com/category/css/
【讨论】:
document.getElementById("my").className = 'myclass';
【讨论】:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("div").addClass(function(){
return "par" ;
});
});
</script>
<style>
.par {
color: blue;
}
</style>
</head>
<body>
<div class="test">This is a paragraph.</div>
</body>
</html>
【讨论】: