Ответ 1
Есть две проблемы:
-
Как уже указывалось, вы должны использовать полное пространство имен uri, поэтому в этом случае:
newpath = document.createElementNS('http://www.w3.org/2000/svg',"path");
-
Атрибуты также должны быть заданы с учетом пространства имен. Хорошей новостью является то, что вы можете передать
null
в качестве пространства имен uri, поэтому: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");
Кроме того, здесь есть два способа упростить работу с пространством имен svg (при условии, что это автономный svg, не встроенный в HTML):
- Чтобы ссылаться на элемент svg, вместо указания идентификатора, вы можете использовать
document.rootElement
. -
document.rootElement.getAttribute(null, "xmlns")
возвращает пустую строку (при запросе других атрибутов работает с использованием этого метода. Вместо этого используйтеdocument.rootElement.namespaceURI
.
Итак, в вашем коде вы можете сделать следующие перезаписи:
From:
newpath = document.createElementNS("http://www.w3.org/2000/svg","path");
To:
newpath = document.createElementNS(document.rootElement.namespaceURI,"path");
И чтобы добавить элемент, вы можете перейти от:
document.getElementById("fullPageID").appendChild(newpath);
в
document.rootElement.appendChild(newpath);
Таким образом, окончательный script будет:
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);