Есть ли простой способ очистить содержимое элемента SVG? - PullRequest
49 голосов
/ 09 сентября 2010

В HTML я могу очистить элемент <div> с помощью этой команды:

div.innerHTML = "";

Есть ли эквивалент, если у меня есть элемент <svg>?Я не могу найти innerHTML, innerXML или даже innerSVG метод.

Я знаю, что SVG DOM - это расширенный набор XML DOM, поэтому я знаю, что могу сделать что-то вроде этого:

while (svg.lastChild) {
    svg.removeChild(svg.lastChild);
}

Но это утомительно и медленно.Есть ли более быстрый или простой способ очистки элемента SVG?

Ответы [ 8 ]

39 голосов
/ 11 июня 2013

Если вы используете jQuery, вы можете просто сделать

$("#svgid").empty();

. Этот удаляет все дочерние элементы svg, оставляя его другие атрибуты, такие как ширина и высота, без изменений.

27 голосов
/ 23 сентября 2010

Вы уже дали один ответ: вы всегда можете просто перебрать все дочерние элементы и удалить их. Если вы считаете, что у вас слишком много дочерних узлов, возможно, вы захотите заменить узел svg на пустой. Если ваш svg-узел имеет некоторые атрибуты, вы можете использовать тег, в котором вы размещаете все дочерние узлы, а затем просто заменяете узел пустым.

19 голосов
/ 15 мая 2014

Используйте d3.js. Это удалит все узлы содержимого из SVG.

svg.selectAll("*").remove();
10 голосов
/ 21 декабря 2015

Я согласен использовать клон и заменить элемент на клонированный.

Код только одной строки:

svg.parentNode.replaceChild(svg.cloneNode(false), svg);
1 голос
/ 14 августа 2015

Вы можете использовать клон и заменить элемент на клонированный.

    var parentElement = svg.parentElement
    var emptySvg = svg.cloneNode(false);
    parentElement.removeChild(svg);
    parentElement.appendChild(emptySvg);

Это добавит svg в конце, вы можете получить элемент раньше и добавить аккординалы

0 голосов
/ 23 апреля 2014

Я пробовал svg.text(""), и, похоже, работает. Очищает весь внутренний текст, сохраняет атрибуты.

0 голосов
/ 29 января 2013
element = document.getElementById("elementID");
element.parentNode.removeChild(element);

Я получил идею от http://www.carto.net/svg/manipulating_svg_with_dom_ecmascript/

0 голосов
/ 09 сентября 2010

использовать это? http://keith -wood.name / svg.html

есть также Рафаэль: JQuery SVG против Рафаэля

Я бы соблазнился пройтись и посмотреть, кто использует их методы .destroy().

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