There are two issues:
-
As already pointed out, you have to use the full namespace uri, so in this case:
newpath = document.createElementNS('http://www.w3.org/2000/svg',"path"); -
Attributes also need to be set with namespace in mind. The good news is that you can pass in
nullas the namespace uri, so:newpath.setAttributeNS(null, "d", "M 1,97.857143 C 19.285714,96.428571 24.016862,131.64801 90.714286,132.85714 140.78762,133.7649 202.79376,66.16041 202.79376,66.16041");
Also, here are two ways to make dealing with the svg namespace easier (assuming that it is a standalone svg, not embedded in HTML):
- To refer to the svg element, instead of giving it an ID, you can use
document.rootElement. document.rootElement.getAttribute(null, "xmlns")returns an empty string (while requesting other attributes does work using this method. Instead, usedocument.rootElement.namespaceURI.
So in your code, you could make the following rewrites:
From:
newpath = document.createElementNS("http://www.w3.org/2000/svg","path");
To:
newpath = document.createElementNS(document.rootElement.namespaceURI,"path");
And to append the element, you can go from:
document.getElementById("fullPageID").appendChild(newpath);
to:
document.rootElement.appendChild(newpath);
So the final script would be:
newpath = document.createElementNS(document.rootElement.namespaceURI,"path");
newpath.setAttributeNS(null, "id", "pathIdD");
newpath.setAttributeNS(null, "d", "M 1,97.857143 C 19.285714,96.428571 24.016862,131.64801 90.714286,132.85714 140.78762,133.7649 202.79376,66.16041 202.79376,66.16041");
newpath.setAttributeNS(null, "stroke", "black");
newpath.setAttributeNS(null, "stroke-width", 3);
newpath.setAttributeNS(null, "opacity", 1);
newpath.setAttributeNS(null, "fill", "none");
document.rootElement.appendChild(newpath);