Tengo un fragmento de código JavaScript que crea (usando D3.js) un svg
elemento que contiene un gráfico. Quiero actualizar el gráfico en función de los nuevos datos provenientes de un servicio web que utiliza AJAX, el problema es que cada vez que hago clic en el botón de actualización, genera uno nuevo svg
, por lo que quiero eliminar el antiguo o actualizar su contenido.
Aquí hay un fragmento de la función JavaScript donde creo el svg
:
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
¿Cómo puedo eliminar el svg
elemento antiguo o al menos reemplazar su contenido?
javascript
ajax
svg
d3.js
Sami
fuente
fuente
d3.select("svg").empty();
Respuestas:
Aquí está la solución:
Esta es una
remove
función proporcionada por D3.js.fuente
svg.selectAll("*").remove();
. Esto borra el contenido del elemento incluso si establece lasvg
variable en un elemento de agrupación (g
).Si quieres deshacerte de todos los niños,
eliminará todo el contenido asociado con el svg.
Nota : Esto se recomienda en caso de que desee actualizar el gráfico.
fuente
Establecer el atributo id al agregar el elemento svg también puede permitir que d3 seleccione, así que remove () más adelante en este elemento por id:
fuente
Tenía dos cartas
Esto eliminó todos los gráficos.
Esto funcionó para eliminar el gráfico de barras existente, pero luego no pude volver a agregar el gráfico de barras después
Intenté esto. No solo me permite eliminar el gráfico de barras existente, sino que también me permite volver a agregar un nuevo gráfico de barras.
No estoy seguro de si esta es la forma correcta de eliminar y volver a agregar un gráfico en d3. Funcionó en Chrome, pero no lo he probado en IE.
fuente
Estoy usando el SVG usando D3.js y tuve el mismo problema.
Utilicé este código para eliminar el svg anterior, pero el gradiente lineal dentro de SVG no llegaba en IE
$ ("# container_div_id"). html ("");
luego escribí el siguiente código para resolver el problema
Aquí estoy eliminando el g y la ruta anteriores dentro del SVG, reemplazando con el nuevo.
Manteniendo mi gradiente lineal dentro de las etiquetas SVG en el contenido estático y luego llamé al código anterior, esto funciona en IE
fuente
También puede usar jQuery para eliminar el contenido del div que contiene su svg.
fuente
Debe usar
append("svg:svg")
, noappend("svg")
para que D3 haga el elemento con el "espacio de nombres" correcto si está usando xhtml.fuente