使用js将svg矩形添加到dom

Posted

技术标签:

【中文标题】使用js将svg矩形添加到dom【英文标题】:adding svg rectangle to dom using js 【发布时间】:2019-11-17 19:35:16 【问题描述】:

我会在每个节点元素上添加一个矩形

rect 仅添加在最后一个元素中。

  ngAfterViewInit() 


  let rect : NodeList = this.synoptic.nativeElement.querySelectorAll("#stops g");
  let rect2 = document.createElementNS('','rect');
  rect2.setAttribute("fill","none");
  rect.forEach((elm : Node) => 
    console.log(elm.firstChild) #### Well selecting the first element
    elm.insertBefore(rect2,elm.firstChild);
    console.log(elm) ####rect  added
  )
### rect is awailable only in the last elm

编辑我正在使用 angular 并且我的代码在 ngAfterViewInit() 钩子内运行

Here stackblitz 演示

【问题讨论】:

【参考方案1】:

SVG 命名空间是“http://www.w3.org/2000/svg”,而不是空字符串。

此外,没有填充的矩形将不可见,它要么需要填充,要么需要描边,而且似乎都没有指定。

最后它需要一个非零的宽度和高度。

【讨论】:

我添加了命名空间,但没有任何反应 我已经更新了我的问题【参考方案2】:

通过添加namespacerect 所需的属性来尝试这种方式

(function() 

  let rect = document.querySelectorAll("#stops g");
  rect.forEach(e => 
    let rect2 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
    rect2.setAttribute("fill", "#000");
    rect2.setAttribute('x', e.getAttribute('x'));
    rect2.setAttribute('y', e.getAttribute('y'));
    rect2.setAttribute('height', '50');
    rect2.setAttribute('width', '50');
    e.appendChild(rect2);
  );

)();
<svg id="stops" xmlns="http://www.w3.org/2000/svg">
<g x="0" y="0"></g>
<g x="100" y="100"></g>
</svg>

Angular Working Fiddle

【讨论】:

rect 是一个 NodeList ,您的示例仅使用一个节点。除此之外,我将插入 rect 元素作为第一个子元素 这是我正在做的事情,但对我不起作用 你的意思是这个解决方案在你的环境中不起作用? 是的,我已经编辑了我的代码以提及我正在使用 Angular 是的,没关系。这应该在角度上工作得很好。你能做一个你正在尝试的样本吗stackblitz.com/edit/angular-5qp2gz

以上是关于使用js将svg矩形添加到dom的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 D3.js 将图像添加到 svg 容器

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

如果存在媒体查询,则 SVG 掩码不起作用

如何使用css在svg中添加从下到上流动的颜色

D3 将文本附加到 SVG 矩形

Jquery / RaphaelJS SVG rect 禁用点击