2010-09-09 16 views
27

In HTML, faccio a cancellare un elemento <div> con questo comando:C'è un modo semplice per cancellare i contenuti di un elemento SVG?

div.innerHTML = ""; 

C'è un equivalente se ho un elemento <svg>? Non riesco a trovare un metodo innerHTML o innerXML o innerSVG.

So che lo SVG DOM è un superset del DOM XML, quindi so che posso fare qualcosa di simile:

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

Ma questo è sia noioso e lento. C'è un modo più veloce o più semplice per cancellare un elemento SVG?

risposta

21

Hai già dato una risposta: puoi sempre ricorrere a tutti i bambini e rimuoverli. Se pensi di avere troppi nodi figli allora forse vuoi sostituire il nodo svg con uno vuoto. Se il tuo nodo svg ha alcuni attributi, puoi usare un tag dove collochi tutti i nodi figli e poi basta sostituire il nodo con uno vuoto.

+0

Sostituire è una buona idea - grazie! –

0

utilizzare questo? http://keith-wood.name/svg.html

c'è anche Raphael: jQuery SVG vs. Raphael

sarei tentato a strascico attraverso e vedere chi stanno facendo il loro .destroy() metodi.

+2

Sembra che stanno facendo esattamente ciò che è Aseem: paperproto.clear = function() {var c = this.canvas; while (c.firstChild) { c.removeChild (c.firstChild); } – robertc

0
element = document.getElementById("elementID"); 
element.parentNode.removeChild(element); 

ho avuto l'idea da http://www.carto.net/svg/manipulating_svg_with_dom_ecmascript/

+0

Questo rimuoverà l'elemento stesso anziché svuotarlo ma funziona davvero per SVG. – howard10

+0

in che modo rimuovere l'intero elemento 'lavoro'? Questo non è quello che è stato chiesto. –

31

Se stai usando jQuery, si può solo fare

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

Questa deletes all child elements del svg lasciando gli altri attributi come larghezza e l'altezza intatto .

+0

Questo era esattamente quello che stavo cercando. – QueueHammer

+2

Rimuove i tag :( –

+0

Espansione su COMMNET di john ktejik L'uso di empty() cancella tutte le definizioni L'uso del ciclo cancella solo quelle definizioni associate ad un elemento figlio rimosso – ouflak

0

Ho provato svg.text("") e sembra funzionare. Cancella tutto il testo interno, mantiene gli attributi.

+0

viene visualizzato l'errore 'non è una funzione' –

+0

Se la domanda non ha jQuery come tag, non pubblicarlo come risposta senza specificare che lo stai utilizzando. Errore – theonlygusti

7

Utilizzare d3.js. Questo rimuoverà tutti i nodi del contenuto da svg.

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

: non definito non è una funzione –

0

È possibile utilizzare il clone e sostituire l'elemento con quello clonato.

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

Questo aggiungerà la svg alla fine, si potrebbe desiderare di ottenere l'elemento prima e aggiungere accordinaly

5

Accetto usare il clone e sostituire l'elemento con la clonato uno.

solo una riga di codice:

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