2017-09-21 14 views
0

D3に外部SVGを読み込み、D3関数を使用して選択して操作できるようにしようとしています。私はd3.select、機能の作業のどれを使用しようとすると、しかし私は外部からD3にロードしたSVGの要素を選択できません

d3.xml("external.svg").mimeType("image/svg+xml").get(function(error, xml) { 
    if (error) throw error; 
    document.body.appendChild(xml.documentElement);       
    }) 

:私はそれを次のコードでページにロードされ得ることができました。選択した要素をconsole.logにすると、空の配列が表示されます。

+3

これ以上のコードを表示する必要があります。さらに良い、[MCVE]。 –

+1

コンソールエラーとは何ですか?あなたはフィドルを提供できますか? – mkaran

+0

[this](https://bl.ocks.org/mbostock/1014829)から[こちら](http://plnkr.co/edit/1s2LJ3mMylqzYjveZlGl?p=preview)を見て、あなたの外部サイト.svgにアクセスできますか?パスは正しいですか? – mkaran

答えて

0

あなたが提供したplunkrに基づいて、イベントが正しく機能するためには、d3がsvgを読み込んだ後にイベントを追加する必要があります。 ので、これに代えて:このように

d3.xml("DCMetroMap.svg").mimeType("image/svg+xml").get(function(error, xml) { 
    if (error) throw error; 
    // load the document 
    document.body.appendChild(xml.documentElement); 

    //then add the events 
    d3.select("#K05") 
    .on("mouseover", function(d) { 
     console.log(d) // d will be null here 
     console.log('hello') 
     alert("Hi!") 

    }) 

    }) 

:あなたはこのような選択を移動する必要が

d3.xml("DCMetroMap.svg").mimeType("image/svg+xml").get(function(error, xml) { 
    if (error) throw error; 
    document.body.appendChild(xml.documentElement); 
    }) 

    // this runs before the above finishes, so d3 won't find something to select 
    d3.select("#K05") 
    .on("mouseover", function(d) { 
     console.log(d) 
     console.log('hello') 
    }) 

    console.log(d3.select("#K05")) 

つまりhttp://plnkr.co/edit/WbYyBKtzZe6MtKGbjzw9?p=preview

、あなたが何かを、あなたはそれを置く必要があります後document.body.appendChild(xml.documentElement);

これが役立ちます。がんばろう!

関連する問題