2010-09-09 17 views
27

W HTML, mogę usunąć element <div> z tym poleceniem:Czy istnieje prosty sposób na wyczyszczenie zawartości elementu SVG?

div.innerHTML = ""; 

Czy istnieje odpowiednik jeśli mam element <svg>? Nie mogę znaleźć metody innerHTML ani innerXML ani nawet innerSVG.

Wiem SVG DOM jest rozszerzeniem XML DOM, więc wiem, że mogę zrobić coś takiego:

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

Ale to jest żmudny i powolny. Czy istnieje szybszy lub łatwiejszy sposób na usunięcie elementu SVG?

Odpowiedz

21

Podałeś już jedną odpowiedź: zawsze możesz zapętlić wszystkie dzieci i je usunąć. Jeśli uważasz, że masz zbyt wiele węzłów potomnych, to być może chcesz zastąpić węzeł svg pustym. Jeśli twój węzeł svg ma pewne atrybuty, możesz użyć znacznika, w którym umieścisz wszystkie węzły potomne, a następnie po prostu zastąp węzeł pustym.

+0

Wymiana jest dobrym pomysłem - dziękuję! –

0

użyć tego? http://keith-wood.name/svg.html

istnieje również Raphael: jQuery SVG vs. Raphael

byłbym skłonny do włoka przez i zobaczyć, kto robią swoje .destroy() metod.

+2

Wygląda na to, że robią dokładnie to, co jest Aseem: paperproto.clear = function() {var c = this.canvas; while (c.firstChild) { c.removeChild (c.firstChild); } – robertc

31

Jeśli używasz jQuery, można po prostu zrobić

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

Ten deletes all child elements z SVG, pozostawiając swoje inne atrybuty takie jak szerokość i wysokość nienaruszonego .

+0

To było dokładnie to, czego szukałem. – QueueHammer

+2

Usuwa znaczniki : ( –

+0

Aby rozwinąć na komunikatorze john'a ktejika, użycie pustego() usuwa wszystkie definicje, używając tylko pętli usuwa definicje związane z usuniętym elementem potomnym – ouflak

0

Próbowałem już svg.text("") i wygląda na to, że działa. Usuwa cały tekst wewnętrzny, zachowuje atrybuty.

+0

Otrzymuję komunikat "nie jest funkcją" –

+0

Jeśli pytanie nie ma jQuery jako znacznika, nie publikuj go jako odpowiedzi bez określania, że ​​go używasz. – theonlygusti

7

Użyj d3.js. Spowoduje to usunięcie wszystkich węzłów zawartości z svg.

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

error: undefined nie jest funkcją –

0

Możesz użyć klonu i zamienić element na sklonowany.

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

To doda SVG na końcu, może chcesz uzyskać element przed i dołącz accordinaly

5

zgadzam używać klonu i wymienić wkład ze sklonowanego jeden.

Tylko jedna linia kodu:

svg.parentNode.replaceChild(svg.cloneNode(false), svg); 
Powiązane problemy