有的人喜欢用 Element.className 获取一个元素的所有 class,然后用 indexOfmatch 等字符串方法来做一些操作。一般情况下这是没问题的。然而有一种特殊情况—— SVG 元素。

SVG 元素的 className 是一个 SVGAnimatedString 对象,其结构如下:

{
  animVal: 'classNames',
  baseVal: 'classNames'
}

其中的 animVal 的含义如下:

(animVal) 这是表示动画值的字符串。如果给定的属性或特性正在被设置动画,则它包含该属性或特性的当前已设置动画的值。如果给定的属性或特性当前未设置动画,则它包含与baseVal相同的值。

baseVal 就是设置的值。

对象上可不存在 match 等字符串方法,所以会报错。如果你坚持使用 Element.className 获取元素的类,请对获取的值做一个类型判断。

if(typeof element.className === 'string') ...

更好的方法是使用 Element.classList 方法,它返回一个类数组对象 DOMTokenList,不仅可以当做数组操作,还具有 containsaddremove 等很多便捷操作 class 列表的方法。


End

标签: SVG

添加新评论