如何读取项目中包含的 svg 文件并对其进行写入?

rav*_*avp 7 javascript svg

我有一个示例 svg 文件(我们称之为“myImage.svg”)作为代码:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg>
  <g>
    <rect
       style="fill:#ff8080;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       id="rect3336"
       width="100"
       height="10"
       x="0"
       y="412.36221" />
  </g>
</svg>
Run Code Online (Sandbox Code Playgroud)

它包含在我的项目目录中。

在另一个 JavaScript 文件中,我想做这样的事情:

var file = getFile("myImage.svg");
var rect = file.getElement("rect");
rect.getAttribute("width") = "1000";
Run Code Online (Sandbox Code Playgroud)

我在 StackOverflow 上阅读了很多问题,但我不知道从哪里开始获取我的文件。

gue*_*314 7

您可以在元素处使用XMLHttpRequest(), DOMParser(), String.prototype.indexOf(), String.prototype.slice(),<a>元素,download属性<a>encodeURIComponent()

  var request = new XMLHttpRequest();
  request.open("GET", "myImage.svg");
  request.setRequestHeader("Content-Type", "image/svg+xml");
  request.addEventListener("load", function(event) {
    var response = event.target.responseText;
    var doc = new DOMParser();
    var xml = doc.parseFromString(response, "image/svg+xml");
    var rect = xml.getElementById("rect3336");
    rect.setAttribute("width", 1000);
    var result = response.slice(0, response.indexOf("<svg"));
    result += xml.documentElement.outerHTML;
    var a = document.createElement("a");
    a.download = "myImage.svg";
    a.href = "data:image/svg+xml," + encodeURIComponent(result);
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
  });
  request.send();
Run Code Online (Sandbox Code Playgroud)

  • 您不必使用 get 请求来简单地在本地读取/写入文件。 (2认同)