首页 > 解决方案 > 未捕获的类型错误:无法读取 SVGPathElement 处未定义的属性“setAttribute”

问题描述

我有一个 svg 地图图像,我想循环它的路径元素并添加一个类。我仍然收到上述错误。这是我的代码

document.addEventListener("DOMContentLoaded", function() {
svg = document.getElementsByTagName('path');        

for(i=0; i<svg.length;i++)
  {
    svg[i].addEventListener('mouseover', function(){
        svg[i].setAttribute('class','svgclass');
    });
  }

});

我究竟做错了什么?谢谢

标签: javascriptjquerysvg

解决方案


svg[i]在这一点上是未定义的mouseover。可能是因为i等于每个事件处理程序中循环的最高值,并且至少有一个元素已从集合中删除。

一个更好的选择是使用this来引用引发事件的元素。注意使用classList.add()as well; 这会将一个类附加到任何现有的类,而不是删除所有现有的类。

for (i = 0; i < svg.length; i++) {
  svg[i].addEventListener('mouseover', function() {
    this.classList.add('svgclass');
  });
}

推荐阅读