2017-07-17 7 views
0

jQueryを使用してAlchemy.jsで生成されたSVGと対話するにはどうすればよいですか?jQueryを使用してAlchemy.jsと対話するSVG

私は、Alchemy.jsによって構築されたSVG要素と対話するためにjQueryを使用しようとしています。

次のコードは期待通りに動作しません(リンクをクリックして要素の値でアラートを表示することができます)。しかし、Firefoxのコンソールで手動で$( "g")を入力すると、 on( "click"、displayNode)インタラクションは期待通りに機能します。

これは、スクリプト実行(?)中のSVG要素の準備に関連するいくつかの問題のようです。

<!doctype html> 
 
<html> 
 
<head> 
 
\t <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/alchemyjs/0.4.2/alchemy.min.css" /> 
 
\t <script src="https://d3js.org/d3.v3.min.js" charset="utf-8"></script> 
 
\t <script src="https://cdnjs.cloudflare.com/ajax/libs/alchemyjs/0.4.2/alchemy.min.js"></script> 
 
\t <script src="https://cdnjs.cloudflare.com/ajax/libs/alchemyjs/0.4.2/scripts/vendor.js"></script> 
 
\t <link rel="stylesheet" type="text/css" href="svg/jquery.svg.css"> 
 
\t <script type="text/javascript" src="svg/jquery.svg.js"></script> 
 
\t <script type="text/javascript"> 
 
\t function displayNode() 
 
\t { 
 
\t \t var label = $(this).find("text").text(); 
 

 
\t \t alert("Clicked on [" + label + "]"); 
 
\t } 
 

 
\t var config = 
 
\t { 
 
\t \t dataSource: "philosopher.json", 
 
\t \t cluster: true, 
 
\t \t clusterColours: ["#DD79FF", "#00FF30", "#5168FF", "#f83f00", "#ff8d8f"], 
 
\t \t forceLocked: false, 
 
\t \t nodeCaption: "title", 
 
\t \t edgeCaption: "relatedness", 
 
\t \t nodeCaptionsOnByDefault: true, 
 
\t \t nodeTypes: {"type":["philosopher"]}, 
 
\t \t directedEdges:true, 
 
\t \t nodeStyle: 
 
\t \t { 
 
\t \t \t "philosopher": 
 
\t \t \t { 
 
\t \t \t \t "radius": 18 
 
\t \t \t } 
 
\t \t }, 
 
\t \t initialScale: 0.7, 
 
\t \t initialTranslate: [250,150] 
 
\t }; 
 
\t 
 
\t $(function() { 
 
\t \t alchemy = new Alchemy(config); 
 

 
\t \t $("g.active").on("click",displayNode); 
 
\t }); 
 
\t </script> 
 
</head> 
 
<body> 
 
\t <div class="alchemy" id="alchemy"></div> 
 
</body> 
 
</html>

答えて

0

代わりにこれを試してみてください: $('#alchemy').on('click', 'g.active', displayNode);

をalchemy.jsについて多くを知らなければ、私はそれが動的にjQueryのを知っていないことをページにDOM要素を追加することを想定しますページの読み込み時に私はjQueryが 'g.active'を見つけることができず、クリックリスナーを追加できないと思う。

親ノードを使用してオンクリックを検出または登録する必要があります。代わりに$('body').find(....)を使用することができます - 私はJavaScriptコンソール(ほとんどのブラウザではF12を打つことで見つけました)で遊んで、Alchemy.jsとのインターフェース方法をテストしようとします。

+0

ありがとうございました。さらに、開発ツールコンソールから入力すると、提案されたコードは機能しません(開発ツールコンソールから入力した場合は元の "$( 'g')on( 'click'、displayNode)は機能します)。 – atrobinson

+0

:/ごめんなさい。私はおそらく、働く答えに貢献するためにalchemy.jsについて十分に知りません。 – Porschiey

関連する問題