2014-04-06 61 views
0

鑑於a D3js script,交互功能很像我想要的,使用topojson來生成它的SVG。D3js頁面:如何用獨立的svg文件替換topojson生成的svg?

鑑於我,在我身邊,沒有topojson,而是一個SVG文件,我希望重複使用相同的交互功能。

我該如何處理,以便我的D3js代碼加載我的SVG文件,而不是從topojson生成一個?

我當然會提供嚴格編碼的SVG文件,並帶有合適的ID和語法。


想法:我想我應該更換

d3.json("/mbostock/raw/4090846/us.json", function(error, us) { 
    // further SVG generator code here 
}); 

它的東西產生的SVG代碼加載並把我的SVG文件,但如何處理?使用什麼代碼?

+0

d3對您提供的數據真的很挑剔。您可能需要查看外部庫以將其他文件的格式更改爲其喜歡的內容。 – royhowie

+0

我當然會提供嚴格編碼的SVG文件,並提供合適的ID和語法。 – Hugolpz

回答

1

您可以直接在您的HTML中包含SVG文件,無需使用Javascript加載它。例如:

<object id="mySVG" data="my.svg" type="image/svg+xml"></object> 

保持這種心態的唯一的事情是,你最終文檔兩個海外省(主HTML一個和嵌入SVG的一個)和CSS選擇器不會越過邊界DOM 。也就是說,d3.select("#IDinSVG")可能不起作用,但應該如d3.select(d3.select("#mySVG").node().getDocumentElement()).select("#IDinSVG")

+0

這種方法怎麼樣:http://stackoverflow.com/a/20254203/1974961'd3.xml(「img/mysvg.svg」,函數(xml){document.body.appendChild(xml.documentElement); });'可以讓CSS選擇器更加直接。 – Hugolpz

+0

是的,那也應該可以。 –