Eu tenho um pedaço de código JavaScript que cria (usando D3.js) um svg
elemento que contém um gráfico. Quero atualizar o gráfico com base em novos dados provenientes de um serviço da Web usando AJAX, o problema é que cada vez que clico no botão de atualização, ele gera um novo svg
, por isso quero remover o antigo ou atualizar seu conteúdo.
Aqui está um trecho da função JavaScript onde eu crio o svg
:
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
Como posso remover o svg
elemento antigo ou pelo menos substituir seu conteúdo?
javascript
ajax
svg
d3.js
Sami
fonte
fonte
d3.select("svg").empty();
Respostas:
Aqui está a solução:
Esta é uma
remove
função fornecida pelo D3.js.fonte
svg.selectAll("*").remove();
. Isso limpa o conteúdo do elemento, mesmo que seja definido comosvg
variável para um elemento de agrupamento (g
).Se você quer se livrar de todas as crianças,
irá remover todo o conteúdo associado ao svg.
Nota : Isso é recomendado caso você queira atualizar o gráfico.
fonte
A configuração do atributo id ao anexar o elemento svg também pode permitir que o d3 selecione, então remova () posteriormente neste elemento por id:
fonte
Eu tinha dois gráficos.
Isso removeu todos os gráficos.
Isso funcionou para remover o gráfico de barras existente, mas não foi possível adicionar novamente o gráfico de barras depois
Tentei isso. Além de permitir a remoção do gráfico de barras existente, também é possível adicionar novamente um novo gráfico de barras.
Não tenho certeza se essa é a maneira correta de remover e adicione novamente um gráfico no d3. Funcionou no Chrome, mas não foi testado no IE.
fonte
Estou usando o SVG usando o D3.js. e tive o mesmo problema.
Eu usei esse código para remover o svg anterior, mas o gradiente linear dentro do SVG não estava chegando no IE
$ ("# container_div_id"). html ("");
então eu escrevi o código abaixo para resolver o problema
Aqui estou removendo o caminho e o caminho anterior dentro do SVG, substituindo pelo novo.
Mantendo meu gradiente linear dentro das tags SVG no conteúdo estático e depois chamei o código acima, funciona no IE
fonte
Você também pode usar o jQuery para remover o conteúdo da div que contém o seu svg.
fonte
Você deve usar
append("svg:svg")
, nãoappend("svg")
para que o D3 crie o elemento com o 'namespace' correto, se você estiver usando xhtml.fonte