добавление SVG прямоугольника к DOM с помощью JS - PullRequest
1 голос
/ 08 июля 2019

Я бы добавил прямоугольник, как на каждом элементе Node

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() крюк

Здесь демонстрация стекаблиц

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Попробуйте, добавив namespace и атрибуты, необходимые для rect

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

Угловая рабочая скрипка

0 голосов
/ 08 июля 2019

Пространство имен SVG: 'http://www.w3.org/2000/svg',, а не пустая строка.

Кроме того, прямоугольник с заливкой, равной none, не будет виден, для него требуется либо заливка, либо обводка, и, похоже, он не указан.

Наконец, ему нужны ненулевые ширина и высота.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...