Подтвердить что ты не робот

Есть ли простой способ очистить содержимое элементов SVG?

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

div.innerHTML = "";

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Используйте d3.js. Это приведет к удалению всех узлов содержимого из svg.

svg.selectAll("*").remove();

Ответ 4

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

Только один код строки:

svg.parentNode.replaceChild(svg.cloneNode(false), svg);

Ответ 7

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

Ответ 8

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

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

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