【问题标题】:Replace color in Svg files with Javascript用 Javascript 替换 Svg 文件中的颜色
【发布时间】:2014-07-25 04:03:53
【问题描述】:

我有很多 Svgs 文件,我想用另一种颜色替换一种特定颜色。 我没有路径 id,并且在 600 多个文件中设置的 id 太长了。 所有文件的颜色都与示例中的两个文件相同。我想选择颜色为#EB1A21 的所有元素,并将它们替换为包含另一种颜色的变量。我的 svgs 文件嵌入在对象 html 标记中。 我不想将结果保存在外部文件中,因为新颜色是由用户在 input type=text 中设置的,所以我无法保存所有新的彩色 Svg 文件。我希望它们被“动态”改变

我的文件格式是这样的

<svg>
  <g>
    <path style="fill:#EB1A21;" d="....."/>
    <path style="fill:#292B87;" d="....."/>
    <path style="fill:#EB1A21;" d="....."/>
  </g>
</svg>

我想显示这样的文件:

<svg>
  <g>
    <path style="fill:#color1;" d="....."/>
    <path style="fill:#color2;" d="....."/>`
    <path style="fill:#color1;" d="....."/>
  </g>
</svg>

Ps:对不起我的语言我是法国人:)

提前谢谢..

----解决方案----

<script type="text/javascript">
    for (i in mySvgFiles){
        var curImage = escape(mySvgFiles[i]);
        $("#contents").append('<object data="file.svg" type="image/svg+xml" onload="selectObj(this);"><object/  >');
    }

    function selectObj(my_object){
        var colorChoice1 = "#FF0000"
        var colorChoice2 = "#00FF00"
        var svgDoc = my_object.contentDocument;
        var svgRootemp = svgDoc.documentElement;
        colorize(svgRootemp, colorChoice1, colorChoice2);
    }

    function colorize(svgRoot, color1, color2){
        $("[style='fill:#292B87;']",svgRoot).css("fill", color1);
        $("[style='fill:#EB1A21;']",svgRoot).css("fill", color2);
    }
</script>
<div id="contents"></div>

如果您对此有任何疑问,可以问我:)

【问题讨论】:

  • 这就是 CSS 的用途。给具有共同颜色的路径一个共同的 CSS 类,然后将 CSS 类中的颜色更改为您想要的任何颜色。
  • 请指定您是希望它们“动态”更改(意味着您希望在 javascript/css 中控制它们)还是希望它们永久更改。说您有 600 个文件让我觉得您希望永久更改它们,而不是动态更改它们(即使用 javascript 或 css)。
  • 感谢已更正

标签: javascript html css svg


【解决方案1】:
var color1 = "#00FF00";
var color2 = "#FF0000";

$(document).ready(function () {
    $("path").each(function () {
        var color = $(this).css("fill");
        if (color == "rgb(235, 26, 33)") {
            $(this).css("fill", color1);
        } else if (color == "rgb(41, 43, 135)") {
            $(this).css("fill", color2);
        }
    });
});

【讨论】:

  • 感谢您的回答,但我没有找到解决方法。
  • 我认为这个答案需要更多解释......就像添加 jquery。
猜你喜欢
  • 2023-04-10
  • 2023-01-27
  • 2013-08-29
  • 1970-01-01
  • 2021-05-10
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多