7

I have a sample svg file (let's call it "myImage.svg") as code:

<?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>

It is included in my project's directory.

In another JavaScript file, I would like to do something like this:

var file = getFile("myImage.svg");
var rect = file.getElement("rect");
rect.getAttribute("width") = "1000";

I've read many questions on StackOverflow but I'm at a loss at where to start to get my file.

Dekel
  • 60,707
  • 10
  • 101
  • 129
ravp
  • 121
  • 1
  • 1
  • 9

1 Answers1

7

You can use XMLHttpRequest(), DOMParser(), String.prototype.indexOf(), String.prototype.slice(), <a> element, download attribute at <a> element, 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();
guest271314
  • 1
  • 15
  • 104
  • 177