我推荐一种不同的方法:使用 CSS 更改颜色。那里不需要循环遍历 SVG 元素。为了能够做到这一点,您应该稍微清理一下 SVG 文件,这也会使其更紧凑。
据我了解,您所有要着色的元素都具有与内容相同的样式属性
font-size:12px;fill:#d0d0d0;fill-rule:nonzero;stroke:#000000;stroke-opacity:1;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:butt;marker-start:none;stroke-linejoin:bevel
删除那些属性,用合理的class
属性替换它们。假设这些路径是地图上的国家,那么让我们给它们一个属性class="country"
。然后使用一个 CSS 规则为所有这些设置样式,例如:
.country {
fill: #d0d0d0;
fill-rule:nonzero;
stroke:#000000;
stroke-opacity:1;
stroke-width:0.1;
stroke-miterlimit:4;
stroke-dasharray:none;
stroke-linecap:butt;
marker-start:none;
stroke-linejoin:bevel;
}
我离开了该font-size
属性,因为这与<path>
元素无关。(可能您可以进一步简化这一点,因为许多属性重复默认值,除非您在路径的父元素中更改这些属性,否则fill-rule
, stroke-opacity
, stroke-miterlimit
,stroke-dasharray
和是多余的stroke-linecap
,marker-start
但不要伤害任何人。)
还有一个问题:如果文件中的 ID 看起来确实像0123
,0456
或0789
,那么它们是无效的,因为它们需要遵循 XML 名称的规则,不能以数字开头。在尝试使用它们的 ID 设置这些元素的样式或尝试getElementById()
在它们上使用它们时,您应该会遇到问题。因此,您可能希望将它们更改为类似id0123
,id0456
和id0789
现在,您可以从 CSV 数据中动态添加一些 CSS。
0123,0456,0789
会成为
#id0123,#id0456,#id0789 {fill:#FF0000}
你就完成了。CSS 可以添加到<style>
SVG 文件的元素中,或者您创建一个单独的 CSS 文件并从 SVG 中引用它。这样,在动态更改颜色时,您不必对 SVG 进行任何更改。如果您在 HTML 中使用内联 SVG 数据,您还可以将其添加到<style>
HTML 页面中的元素或 HTML 引用的 CSS 文件中。