[SVG]小提示:svg元素的className不是字符串,而是SVGAnimatedString对象
有的人喜欢用 Element.className
获取一个元素的所有 class,然后用 indexOf
、match
等字符串方法来做一些操作。一般情况下这是没问题的。然而有一种特殊情况—— SVG 元素。
SVG 元素的 className
是一个 SVGAnimatedString
对象,其结构如下:
{
animVal: 'classNames',
baseVal: 'classNames'
}
其中的 animVal
的含义如下:
(animVal) 这是表示动画值的字符串。如果给定的属性或特性正在被设置动画,则它包含该属性或特性的当前已设置动画的值。如果给定的属性或特性当前未设置动画,则它包含与baseVal相同的值。
baseVal
就是设置的值。
对象上可不存在 match
等字符串方法,所以会报错。如果你坚持使用 Element.className
获取元素的类,请对获取的值做一个类型判断。
if(typeof element.className === 'string') ...
更好的方法是使用 Element.classList
方法,它返回一个类数组对象 DOMTokenList
,不仅可以当做数组操作,还具有 contains
、add
、remove
等很多便捷操作 class 列表的方法。
End