如何更改 HTML 元素类以响应onclick使用 JavaScript 事件或其他事件?& v8 p0 U: @# B
7 q+ T& s% m t解决方案: ' R. t+ d0 d1 d/ G) Z 现代 用于改变类别HTML5 技术添加了现代浏览器classList,在没有库的情况下,它提供了一些更容易操作的方法: % h y5 p$ t$ u" f, Q% w
document.getElementById("MyElement").classList.add('MyClass');document.getElementById("MyElement").classList.remove('MyClass');if ( document.getElementById("MyElement").classList.contains('MyClass') )document.getElementById("MyElement").classList.toggle('MyClass');- a3 u- Y. o, m8 n6 G6 b0 z
不幸的是,这些都在 v10 之前的 Internet Explorer 不起作用,虽然有一个shim可以为 IE8 和 IE9 可以从这个页面添加支持。然而,它得到了越来越多的支持。8 B0 B K5 }( [9 `: h7 f
简单的跨浏览器解决方案选择元素的标准 JavaScript 方式是 using document.getElementById("Id"),这是如下示例所用 - 当然,你可以通过其他方式获得元素,在正确的情况下可以简单地使用它们this- 但是,超出范围的答案被详细解释。; o7 q2 Z% o) {+ m7 \- i
所有要改变元素的类别:将所有现有类别替换为一个或多个新类别,请设置 className 属性: , T9 z' z3 @1 `6 ^ J/ n
document.getElementById("MyElement").className = "MyClass"; : \( e; W) u' z
(您可以使用空间分隔列表来应用多个类别。 : q, v/ R2 ]) u( Z- h1 r添加附加元素:在不删除/影响现有值的情况下,将类添加到元素中,请添加空间和新的类名,如下所示:4 s0 h) R4 b* v/ G3 A
删除元素中的一个类:在不影响其他潜在类别的情况下,需要简单的正则表达替换:3 ~$ j& }/ z8 y! a: O
document.getElementById("MyElement").className = document.getElementById("MyElement").className.replace ^|\s)MyClass(?!\S)/g ,'' )/* Code wrapped for readability - above is all one statement */0 O0 O* R1 x" c% a
正则表达式的解释如下: 1 O: {* ?+ z- @* o
(?:^|\s) # Match the start of the string or any single whitespace characterMyClass # The literal text for the classname to remove(?!\S) # Negative lookahead to verify the above is the whole classname # Ensures there is no non-space character following # (i.e. must be the end of the string or space)7 G& i5 Q/ O% s- T# H* z8 L5 S