Ich habe einen Teil des JavaScript-Codes, der (mit D3.js) ein svg
Element erstellt, das ein Diagramm enthält. Ich möchte das Diagramm basierend auf neuen Daten aktualisieren, die von einem Webdienst mit AJAX stammen. Das Problem ist, dass jedes Mal, wenn ich auf die Schaltfläche "Aktualisieren" klicke, ein neues generiert svg
wird. Daher möchte ich das alte entfernen oder dessen Inhalt aktualisieren.
Hier ist ein Ausschnitt aus der JavaScript-Funktion, in der ich Folgendes erstelle svg
:
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
Wie kann ich das alte svg
Element entfernen oder zumindest seinen Inhalt ersetzen?
javascript
ajax
svg
d3.js
Sami
quelle
quelle
d3.select("svg").empty();
Antworten:
Hier ist die Lösung:
Dies ist eine
remove
Funktion von D3.js.quelle
svg.selectAll("*").remove();
. Dadurch wird der Inhalt des Elements gelöscht, auch wenn diesvg
Variable auf ein Gruppierungselement (g
) gesetzt ist.Wenn Sie alle Kinder loswerden wollen,
entfernt alle mit dem svg verknüpften Inhalte.
Hinweis : Dies wird empfohlen, wenn Sie das Diagramm aktualisieren möchten.
quelle
Wenn Sie das ID-Attribut beim Anhängen des SVG-Elements festlegen, kann d3 auch auswählen, also entfernen Sie () später für dieses Element anhand der ID:
quelle
Ich hatte zwei Diagramme.
Dadurch wurden alle Diagramme entfernt.
Dies funktionierte zum Entfernen des vorhandenen Balkendiagramms, aber danach konnte ich das Balkendiagramm nicht mehr hinzufügen
Versuchte dies. Damit kann ich nicht nur das vorhandene Balkendiagramm entfernen, sondern auch ein neues Balkendiagramm hinzufügen.
Ich bin mir nicht sicher, ob dies der richtige Weg ist, um ein Diagramm in d3 zu entfernen und erneut hinzuzufügen. Es hat in Chrome funktioniert, aber nicht im IE getestet.
quelle
Ich benutze die SVG mit D3.js und ich hatte das gleiche Problem.
Ich habe diesen Code zum Entfernen des vorherigen SVG verwendet, aber der lineare Gradient in SVG kam nicht in IE
$ ("# container_div_id"). html ("");
Dann habe ich den folgenden Code geschrieben, um das Problem zu beheben
hier entferne ich das vorherige g und den Pfad innerhalb der SVG und ersetze sie durch das neue.
Behalten Sie meinen linearen Verlauf in SVG-Tags im statischen Inhalt bei und rufen Sie dann den obigen Code auf. Dies funktioniert im IE
quelle
Sie können auch einfach jQuery verwenden, um den Inhalt des Divs zu entfernen, das Ihre SVG enthält.
quelle
Sie sollten verwenden
append("svg:svg")
, nichtappend("svg")
damit D3 das Element mit dem richtigen 'Namespace' erstellt, wenn Sie xhtml verwenden.quelle