首页 > 解决方案 > SVGO 自定义插件。如何在 removeAttr 之前存储 attr().value

问题描述

我正在尝试为 SVGO 构建一个自定义插件,以批量清理和格式化从 illustrator 导出的 svg。

这部分的目的是将相同的方面元素与类保持在组中,而不是在每个元素上都有类。

一切都很好,除了当我尝试删除元素类时,循环丢失了它,我不知道为什么?

如果有人可以提供帮助,那就太酷了!

这是我的代码的摘录:

//before it, loop through elements with conditions to keep <g></g> as "g"
var myclass;
g.content.forEach(function(inner){
  if (inner.hasAttr("class")){
    myclass = inner.attr('class').value; // this works as expected
    inner.removeAttr('class'); // this mess it all although it is called after (myclass = "")
    }
});

g.addAttr({
  name: 'class',
  value: myclass,
  prefix: '',
  local: ''
});

标签: javascriptsvgnpmforeach

解决方案


classattr 是 a CSSClassList,所以我猜它不应该删除。这是不久前添加的(v1.0 左右)以更好地处理样式(对于和 之类的插件inlineStylesminifyStyles。看着lib/svgo/css-class-list.js,我认为inner.attr('class').setClassValue()(带有空或undefined参数值)之类的东西应该删除所有类。虽然没有测试。


推荐阅读