使用 DOM 将 SVG 元素添加到现有 SVG

IT技术 javascript html dom svg
2021-01-15 23:48:55

我有一个类似于以下代码的 HTML 结构:

<div id='intro'>
<svg>
//draw some svg elements
<svg>
</div>

我希望能够使用 javascript 和 DOM 向上面定义的 SVG 添加一些元素。我将如何做到这一点?我在想

var svg1=document.getElementById('intro').getElementsByTagName('svg');
svg1[0].appendChild(element);//element like <line>, <circle>

我对使用 DOM 或如何创建要传递给 appendChild 的元素不是很熟悉,所以请帮我解决这个问题,或者告诉我我必须有哪些其他选择来解决这个问题。非常感谢。

2个回答

如果要创建 HTML 元素,请使用document.createElement函数。SVG 使用命名空间,这就是你必须使用document.createElementNS函数的原因

var svg = document.getElementsByTagName('svg')[0]; //Get svg element
var newElement = document.createElementNS("http://www.w3.org/2000/svg", 'path'); //Create a path in SVG's namespace
newElement.setAttribute("d","M 0 0 L 10 10"); //Set path's data
newElement.style.stroke = "#000"; //Set stroke colour
newElement.style.strokeWidth = "5px"; //Set stroke width
svg.appendChild(newElement);

此代码将产生如下内容:

<svg>
 <path d="M 0 0 L 10 10" style="stroke: #000; stroke-width: 5px;" />
</svg>



createElement: https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement

createElementNS: https://developer.mozilla.org/en-US/docs/Web/API/Document/createElementNS

@Rvervuur​​t 嘿,你用我的帖子做什么?:D
2021-03-16 23:48:55
我明白了Uncaught TypeError: Cannot read property 'setAttribute' of null
2021-03-20 23:48:55
@m93a 删除不必要的图像。如果你想享受图像的乐趣,去论坛或聊天,在这里它只会分散注意力:)
2021-04-01 23:48:55
应该注意的是,与人们想象的相反,您最常newElement.setAttribute()将属性设置为反对newElement.setAttributeNS()- 至少在 Chrome 中。
2021-04-04 23:48:55
这怎么不上图?哦,是的,命名空间:每次都得到我。
2021-04-09 23:48:55

如果您经常使用 JS 处理 svg,我建议您使用 d3.js。将它包含在您的页面上,然后执行以下操作:

d3.select("#svg1").append("circle");
我支持使用 D3 的建议。如果你只是做一次性的,那么是的,用纯 JavaScript 编写它。但是,如果您使用 SVG 进行了大量工作,那么切换到 d3.js 对您大有帮助。它也是一个令人难以置信的轻量级库。它不仅仅是 SVG 的;它实际上将 DOM 转换为数据库。只是它使使用 SVG 变得轻而易举,因此它已成为事实上的SVG 库。
2021-03-21 23:48:55
我想使用普通的 javascript 来做,没有外部库或函数
2021-04-09 23:48:55