javascript - 如何更改 SVG 路径颜色?

标签 javascript svg

更新: 是的,我知道在 SO 上有类似的问题,但解决方案也不起作用。

我想更改 SVG 的颜色,我指的是路径的颜色,不是“内部”颜色,而是路径本身。

我首先尝试使用 css,它根本不起作用。然后使用 js,它几乎可以工作:

这是有效的,也就是说,加载了一个图像。默认情况下为黑色。

<object id = 'test' data="images/icons/040__file_delete.svg" type="image/svg+xml"></object>

我想把它改成绿色。

    <script>
        $(function(){
            document.getElementById("test").addEventListener("load", function() {
                var doc = this.getSVGDocument();
                console.log(doc);//works fine
                var p = doc.querySelector("path"); //works
                p.setAttribute("stroke", "green");
            });    
        })
    </script>

上面的代码确实“有效”,但在路径中添加了一个“边框”。我还尝试了“color”、“fillcolor”、“fill”——没有任何效果。

更新 II: SVG 的来源:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" id="图层_1" x="0px" y="0px" viewBox="0 0 18 18" style="enable-background:new 0 0 18 18;" xml:space="preserve">
<style type="text/css">
    .st0{fill:#231815;}
</style>
<g>
    <g>
        <g>
            <g>
                <g>
                    <path class="st0" d="M13,17.5H5c-1.4,0-2.5-1.1-2.5-2.5V3c0-1.4,1.1-2.5,2.5-2.5h3.6c0.4,0,0.8,0.2,1.1,0.4l5.4,5.4       c0.3,0.3,0.4,0.7,0.4,1.1V15C15.5,16.4,14.4,17.5,13,17.5z M5,1.5C4.2,1.5,3.5,2.2,3.5,3v12c0,0.8,0.7,1.5,1.5,1.5h8       c0.8,0,1.5-0.7,1.5-1.5V7.4c0-0.1-0.1-0.3-0.1-0.4L8.9,1.6C8.8,1.6,8.7,1.5,8.6,1.5H5z" fill="green"/>
                </g>
                <g>
                    <path class="st0" d="M15,7.5h-4C9.6,7.5,8.5,6.4,8.5,5V1c0-0.3,0.2-0.5,0.5-0.5S9.5,0.7,9.5,1v4c0,0.8,0.7,1.5,1.5,1.5h4       c0.3,0,0.5,0.2,0.5,0.5S15.3,7.5,15,7.5z"/>
                </g>
            </g>
            <g>
                <g>
                    <path class="st0" d="M10.5,13.9c-0.1,0-0.3,0-0.4-0.1l-3-3C7,10.5,7,10.2,7.1,10s0.5-0.2,0.7,0l3,3c0.2,0.2,0.2,0.5,0,0.7       C10.8,13.8,10.6,13.9,10.5,13.9z"/>
                </g>
                <g>
                    <path class="st0" d="M7.5,13.9c-0.1,0-0.3,0-0.4-0.1C7,13.5,7,13.2,7.1,13l3-3c0.2-0.2,0.5-0.2,0.7,0s0.2,0.5,0,0.7l-3,3       C7.8,13.8,7.6,13.9,7.5,13.9z"/>
                </g>
            </g>
        </g>
    </g>
</g>
</svg>

最佳答案

路径上的 fill 和/或 stroke 属性不会覆盖 CSS 样式 (here's why)。

您需要做的是覆盖 CSS 样式本身,这可以通过设置 style 属性来完成,例如

<path style="fill:green" ...>

或者在 javascript 中

element.setAttribute('style', 'fill: green');

在您对我的评论的回复中,您提到您将解决“单一路径”问题,以便为此提供一个示例,下面是解决该问题的原因和方法。

querySelector 方法只提供第一个匹配的元素(如果有的话),你要使用querySelectorAll 方法,它会提供一个包含所有匹配元素的NodeList。

var paths = doc.querySelectorAll("path"),
    i;

for (i = 0; i < paths.length: ++i) {
    paths[i].setAttribute('style', 'fill:green');
}

正如我在评论中提到的,getSVGDocument() 方法可能并不存在于您需要支持的所有浏览器上(我对您的要求一无所知,这只是一个提示),您可能对 .contentDocument 属性感兴趣 as described here

关于javascript - 如何更改 SVG 路径颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35844589/

相关文章:

css - 在 svg 中的样式标签上添加多个谷歌字体

javascript - 使用 jquery 为 SVG 的填充设置动画?

javascript - 在不更改 DOM 的情况下重新加载页面 - Javascript

javascript - 通过纯 JS 提交时,查询表单提交不会触发

html - 为什么我的 SVG 没有显示为抗锯齿?

jquery - 使用 jQuery 修改 svg 文件

javascript - 按 StudentId 对数组进行分组并查找具有相同元素的子数组的总和

javascript - div 固定在滚动的某个点

javascript - Polymer CLI 和要求

html - 如何拉伸(stretch) SVG 图像?