Точки, нарисованные в событии onload элемента SVG, НЕ отображаются при рендеринге

Я работаю над рисованием сетки SVG с использованием Javascript. Мне удалось нарисовать ось, а также метки квадрантов. Однако я столкнулся с проблемой при добавлении моих динамических точек.

Я пытаюсь нарисовать точки в событии onload элемента SVG. При использовании Firebug я смог подтвердить, что элементы круга, представляющие мои точки, добавлены в SVG DOM с правильными атрибутами, установленными для местоположения, мазка кисти и т. д.

К сожалению, фактическое изображение, отображаемое моим браузером (Firefox 3), не обновляется, чтобы отразить тот факт, что я добавил эти новые элементы DOM!

Ниже приведен код, который я использую для добавления элементов в правильный узел DOM:

function drawPoints()
  {
    var points = pointCollection.points;
    var grid = SVGDoc.getElementById("gridGroup");

    for(var i = 0 in points)
    {
        var x = points[i].x;
        var y = points[i].y;
        var label = points[i].event;

        //<circle cx = "100" cy = "50" r = "40" stroke = "black" stroke-width = "2" fill = "red"/>

        var dot = SVGDoc.createElement("circle");
        dot.setAttribute("cx", x);
        dot.setAttribute("cy", y);
        dot.setAttribute("r", 15);
        dot.setAttribute("stroke", "red");
        dot.setAttribute("stroke-width", "2");
        dot.setAttribute("fill", "black");

        grid.appendChild(dot);
    }
  }

После этого структура SVG, показанная расширением отладки Firebug для Firefox, выглядит следующим образом:

<svg width = "800" height = "800" version = "1.1" xmlns = "http://www.w3.org/2000/svg" onload = "init(evt); drawAxis(); drawPoints()">
  <g id = "gridGroup" stroke = "green">
    <line id = "xAxis" x1 = "0" x2 = "800" y1 = "400" y2 = "400" stroke-width = "2"/>
    <line id = "yAxis" x1 = "400" x2 = "400" y1 = "0" y2 = "800" stroke-width = "2"/>
    <text id = "importantLabel" x = "155" y = "20" font-family = "Verdana" font-size = "18" fill = "blue" onclick = "drawPoints()">Important</text>
    <text id = "notImportantLabel" x = "555" y = "20" font-family = "Verdana" font-size = "18" fill = "blue">Not-Important</text>
    <text id = "urgentLabel" x = "20" y = "200" font-family = "Verdana" font-size = "18" fill = "blue" transform = "rotate(-90, 20, 200)">Urgent</text>
    <text id = "notUrgentLabel" x = "20" y = "600" font-family = "Verdana" font-size = "18" fill = "blue" transform = "rotate(-90, 20, 600)">Not-Urgent</text>

    <circle cx = "30" cy = "30" r = "15" stroke = "red" stroke-width = "2" fill = "black"/>
    <circle cx = "600" cy = "600" r = "15" stroke = "red" stroke-width = "2" fill = "black"/>
    <circle cx = "400" cy = "400" r = "15" stroke = "red" stroke-width = "2" fill = "black"/>
  </g>
</svg>

Любая помощь будет принята с благодарностью, я новичок в SVG!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
5 793
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы динамически создавать элементы SVG, вы должны использовать метод createElementNS с соответствующим пространством имен, например.

var dot = SVGDoc.createElementNS("http://www.w3.org/2000/svg", "circle");

Для получения дополнительной информации см. уроки Кевина Линдси и особенно здесь.

Спасибо! Это сработало безупречно. Я должен был подозревать, что мне нужно предоставить пространство имен для элемента, который будет считаться допустимым SVG! Еще раз спасибо!

Tim Sullivan 05.11.2008 04:04

Другие вопросы по теме