• ベストアンサー

html5 レーダーチャート

html5を利用し、レーダーチャートを描く勉強をしています。 以下のサイトを参考にしています。 http://www.html5.jp/library/graph_radar.html paramsの中の文字(安さ、性能、デザイン・・・)をURLを挿入して表示させたいと思っています。 (例えばレーダーチャートを描写し、安さをクリックすると安さのページへリンクする。) URLを挿入する方法はありますでしょうか? 方法が分かる方がいらっしゃいましたら、教えて頂けますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.6

なんだか、直前の回答しか記憶に残っていないような… これまでの回答を順に再度ご覧になることをお勧めします。 とりあえず、こんなのでは?(全角空白は半角に) //要素の位置の特定  var div = document.getElementById("sample").parentNode.childNodes;  var flag = false;  for(var i=0; i<div.length; i++){   var txt = div[i].textContent || div[i].innerText;   if(txt == params.aCap[0]){    flag = true;    for(var j=1; j<params.aCap.length; j++){     if(div[i+j]){      txt = div[i+j].textContent || div[i+j].innerText;      if(txt != params.aCap[j]){       flag = false;       break;      }     }     else flag = false;    }    if(flag) break;   }  } //リンク要素を追加  if(flag){   for(j=0; j<params.aCap.length; j++){    var d = div[i+j];    txt = d.textContent || d.innerText;    var a = document.createElement("a");    a.href = "hoge";    while(d.firstChild) d.removeChild(d.firstChild);    a.appendChild(document.createTextNode(txt));    d.appendChild(a);   }  }

sadoru
質問者

お礼

たびたびご返信ありがとうございます。 無事にできました。 いろいろ勉強させて頂きましてありがとうございます。 また、何かありましたらよろしくお願い致します。

その他の回答 (4)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

#4です。 >上記のソースをどのように修正すると~~ ありゃ。 金曜日に、試しに作成していたデータを削除してしまいました。すみません。 要は、  rc.draw(items, params); 実行後は、チャートが作成されていますから、そこからデータを取り出して修正すればよろしいということです。 取り出す方法は、#2みたいな方法で。(もう少し確実な方が良いと思いますが) 入替えるのは、対象要素が変数divに取得できているとして、   var a = document.createElement("a");   var txt = div.textContent || div.innerText;   while(div.firstChild) div.removeChild(div.firstChild);   a.appendChild(document.createTextNode(txt));   a.href = "hoge";   div.appendChild(a); みたいな感じでできるかと思います。

sadoru
質問者

お礼

ご回答ありがとうございます。 以下の通り修正致しましたが、解決できませんでした。 どこか間違っておりますでしょうか? 再度助言を頂けますと幸いです。 /************************************************/ <script type="text/javascript"> window.onload = function(evt) { var rc = new html5jp.graph.radar("sample"); if( ! rc ) { return; } var items = [ ["商品A", 5, 4, 2, 1, 2], ["商品B", 6, 5, 4, 2, 3], ["商品C", 3, 4, 3, 3, 3] ]; var params = { aCap: ["安さ", "安心", "快適"] } rc.draw(items, params);   var div = document.getElementById("sample").parentNode.innerHTML; var a = document.createElement("a"); var txt = div.textContent || div.innerText;   while(div.firstChild) div.removeChild(div.firstChild);     a.appendChild(document.createTextNode(txt));    a.href = "radar.html";     div.appendChild(a); }; /***************************************************************/

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

#3です。 >もう少しヒントを頂けますと幸いです 該当するキャプションや目盛や凡例は外側のdiv要素の子として <div style="font-size: 12px; font-family: Arial,sans-serif; color: rgb(0, 0, 0); margin: 0pt; padding: 0pt; position: absolute; left: 125px; top: 22px;">安さ</div> のような形で生成されるようです。 ただし、みな並列で記述されるので、実際のところ区別がつきません。 できるだけ正確にやるなら、文字列の並び部分が全てマッチするところを探すのがよろしいかと思います。 とりあえず、このdivが特定できれば  <div>text</div> を  <div><a>text</a></div> に変えてあげればよいということになります。 createElement()などできちんと生成して入替えてあげる方法が正道なんでしょうけれど… (一番の正道はjsを解読して、きちんと修正することかな?)  elment.innerHTML = '<a href="' + リンク先 + '">' + element.innerHTML + '</a>'; みたいな方法でも、この場合は可能かと思います。(まぁ、要領としてはこんな感じ) (文字列の中で<や>をそのまま記述するのもあまりよろしくないようなので、\u003Cなどを用いるほうが良いかも。)

sadoru
質問者

お礼

何度もご親切にご連絡ありがとうございます。  onloadの中で処理ということは、以下のソースに手を加えると思い いろいろためしてみたのですが、解決することができませんでした。 /*****************************************************************/ <script type="text/javascript"> window.onload = function() { var rc = new html5jp.graph.radar("sample"); if( ! rc ) { return; } var items = [ ["商品A", 5, 2, 4, 5, 3, 2, 4, 4], ["商品B", 3, 4, 3, 4, 5, 4, 5, 1] ]; var params = { aCap: ["安さ", "性能", "デザイン", "人気", "使いやすさ", "寿命", "軽さ", "強さ"] } rc.draw(items, params); }; </script> /************************************************************/ 大変恐縮ですが、上記のソースをどのように修正するとリンク先を付けられますでしょうか? 以上、よろしくお願い致します。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#2です。 >マウスオンした際にtextとして判断されてしまいlink要素があるのか >ユーザからは判断が難しい状態です #2の内容は、link要素を設定しているわけではなく、一例として、クリックイベントから要素を特定する例を示したものです。 >カーソルをhandにするようにしたいのですが~ 要素のスタイルで、cursor="pointer" を設定することでも可能ですが、スクリプトで行なうのであれば、通常のリンクを設定してしまった方がよろしいかと思います。 当該キャプション部分は<div>text</div>の構成で生成されるみたいですから、<div><a>text</a></div>となるようにonloadの中で処理してしまえば、自動的にカーソルも変化するようになるはずです。

sadoru
質問者

お礼

ご返信ありがとうございます。 大変申し訳御座いませんが、いろいろ頑張ってみましたが、解決方法がわかりませんでした。 もう少しヒントを頂けますと幸いです。

sadoru
質問者

補足

補足ですが、 要素のスタイルで、cursor="pointer" を設定し処理する方法はできました。 onloadの方の処理を教えて頂けますでしょうか?

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

ご提示のjsを解読するのは大変そうなので、中身を見ずにまったく別なアプローチを… ごく単純にテキストを比較しているだけなので同じ文言が複数あると正しく判定できません。 お勉強中とのことなので、正確に判定できるようにしたりlink要素を組み込んだりの修正はお任せします。 とりあえず、どれがクリックされたかを判定する一例として。 (どうやら、チャートの文字はcanvas内には記述されていないようです) (全角空白は半角に) document./*@cc_on@if(1)attachEvent("on"+@else@*/  addEventListener(/*@end@*/"click", function(evt){   var t = evt.target || evt.srcElement;   var p = document.getElementById("sample").parentNode;   if(t.nodeName != "DIV" || t.parentNode != p) return;   var txt = t.textContent || t.innerText;   var acap = ["安さ","性能","デザイン","人気","使いやすさ","寿命","軽さ","強さ"];   var i, flag = false, n = acap.length;   for(i=0; i<n; i++)    if(acap[i] == txt){ flag = true; break; }   if(flag) alert("clickしたのは「" + txt + "」で、acap[ " + i + " ]です"); }, false);

sadoru
質問者

補足

ご回答誠にありがとうございました。 以下の通り、修正致しました。 /**********************************************************************************/ <省略>   var acap = ["安さ","性能","デザイン","人気","使いやすさ","寿命","軽さ","強さ"];   var i, flag = false, n = acap.length;   for(i=0; i<n; i++)    if(acap[i] == txt){ flag = true; break; }   if(flag) {   location.href = "http://www.yahoo.co.jp?val=" + txt;   //alert("clickしたのは「" + txt + "」で、acap[ " + i + " ]です"); } }, false); /* *************************************************************/ リンクを挿入することが無事にできました。ありがとうございます。 また、上記のままですとマウスオンした際にtextとして判断されてしまいlink要素があるのかユーザからは判断が難しい状態です。 解決方法としてカーソルをhandにするようにしたいのですが、可能でしょうか? 何度も恐縮ですが、助言を頂けると幸いです。

関連するQ&A

  • html5 レーダーチャート

    現在、以下のURLのレーダーチャートについて勉強中です。 http://www.html5.jp/library/graph_radar.html そこで1件解決できるかどうかの助言を頂きたい箇所があるのですが、 やりたいことは、全ての軸に対して、目盛(sLabel) を付加させたいと思っています。 サンプルでは、縦軸のみに目盛を付加させています。 助言を頂けますと幸いです。

  • html5.jpレーダーチャートの応用

    学校の課題でhtml5.jpを使ってレーダーチャートを作成したいです。 gaeに登録されている値をレーダーチャートに表示させることが目標です。 window.onload = function() { var rc = new html5jp.graph.radar("sample"); if( ! rc ) { return; } var items = [ ["商品A", 5, 2, 4, 5, 3], ["商品B", 3, 4, 3, 4, 5] ]; var params = { aCap: [ "A","B", "C", "D", "E"] } rc.draw(items, params); }; これはサンプルなのですが、ここの部分を変数に変えて、更にgaeから値を取ってこれる様にしたいです。 データの取得方法は、あるurlにアクセスするとjson形式で値がかえってくるようになっています。そのurlにアクセスする時のパラメータや、返ってくるjson形式の情報の内容はまだ分かっていないのですが、おおまかでもいいので上の変数からどう返ればいいのか教えていただければと思います。 締め切りが迫っているのですが何も分からず焦っています(><)お助けください~!

    • ベストアンサー
    • HTML
  • レーダーチャートを塗りつぶすには?に補足したい

    http://okweb.jp/kotaeru.php3?qid=768072 ここの「レーダーチャートでこんなこと出来ますか?」で回答しましたが、 「塗りつぶしレーダーチャートにしてください」という言葉が足らず、 目的が達成されないまま締め切られてしまいました。 もう補足する方法はないのでしょうか。

  • ExcelレーダーチャートをWord差し込み印刷で

    いつもお世話になります。 標記につきまして、ぜひ教えていただけると助かります。 使用ソフトはExcel・Word2007です。 同じような質問が無いか検索していたところ、「Excel2000でレーダーチャートの自動作成・Wordへの自動挿入は可能か(http://okwave.jp/qa/q414675.html)」にたどり着いて試作してみたのですが、チャートの挿入がうまくいきませんでした。Wordの差し込み印刷の機能もマクロも使い始めたばかりで、設定の仕方や使い方が間違っているのだと思います。 カスタマイズしたい元のデータはこちら「フィードバックプログラム(http://www.tmu-ph.ac/topics/stress_table.php)」にある「結果説明用文書」です。結果をテキスト表示(差し込み)させるだけでなく、2ページ目でレーダーチャートも同時に表示されるようにしたいと思っています。Excelからどのようにレーダーチャート呼び出せばよいのでしょうか。 よろしくお願いいたします。

  • JavaScriptでレーダーチャート表示

    JavaScriptでレーダーチャートを表示したくて html5jp様のライブラリを使用しているのですが 「"angle_num"が宣言されていません」とエラーが表示されてしまい 表示できません。 ちなみにクエリ文字列からデータを取得しています。 どなたか解決お願いします。 ソースは以下のようになってます。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="ja" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title>title</title> <style type="text/css"> canvas {border:0px solid #4c4c4c;} </style> <!--[if IE]><script type="text/javascript" src="graph_radar_1_0_0/html5jp/excanvas/excanvas.js"></script><![endif]--> <script type="text/javascript" src="graph_radar_1_0_0/html5jp/graph/radar.js"></script> <script type="text/javascript"> function $q(){ var result = {}; var str = location.search.substring(1); var paramss = str.split('&'); for(var i = 0;i < paramss.length; i++){ var kv = paramss[i].split('='); result[kv[0]] = decodeURIComponent(kv[1]); } return result; } var q = $q(); for(var j = 1; j < 21; j++){ /* document.write(q['a'+j] + " "); */ q['a'+j]-=0; /* document.write(typeof q['a'+j]); */ } window.onload = function() { var rc = new html5jp.graph.radar("sample"); if( ! rc ) { return; } var items = [ [ q.a0, q.a1, q.a2, q.a3, q.a4, q.a5, q.a6, q.a7, q.a8, q.a9, q.a10], ["ave.", q.a11, q.a12, q.a13, q.a14, q.a15, q.a16, q.a17, q.a18, q.a19, q.a20] ]; var params = { aCap: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"], aMax: 5, aMin: 0 }; rc.draw(items, params); }; </script> </head> <body scroll="no"> <div><canvas width="300" height="200" id="sample"></canvas></div> </body> </html>

  • 教えてください!html5.jpを使ったレーダーチ

    学校の課題でhtml5.jpを使ってレーダーチャートを作成したいです。 gaeに登録されている値をレーダーチャートに表示させることが目標です。 window.onload = function() { var rc = new html5jp.graph.radar("sample"); if( ! rc ) { return; } var items = [ ["商品A", 5, 2, 4, 5, 3], ["商品B", 3, 4, 3, 4, 5] ]; var params = { aCap: [ "A","B", "C", "D", "E"] } rc.draw(items, params); }; これはサンプルなのですが、ここの部分を変数に変えて、更にgaeから値を取ってこれる様にしたいです。 データの取得方法は、あるurlにアクセスするとjson形式で値がかえってくるようになっています。そのurlにアクセスする時のパラメータや、返ってくるjson形式の情報の内容はまだ分かっていないのですが、おおまかでもいいので上の変数からどう返ればいいのか教えていただければと思います。 締め切りが迫っているのですが何も分からず焦っています(><)お助けください~!

  • ACCESS レーダーチャートのデータの設定方法

    アクセスのレポートでレーダーチャートを表示しようとしています。 一度棒グラフあたりで挿入しておき、後から種類を変更することで 一応レーダーチャートのグラフは表示できたのですが、 値の設定の仕方がいまいちわかりません。 ご指導いただけないでしょうか? 出力対象のデータとしたいテーブルは以下のようになっています。 ID(PK)|氏名 |所属 |英語|数学|国語|理科|社会  1  |XX XX |○○○|70  |50  |80  |60  |75  2  |xx xx  |△△△|60  |80  |65  |90  |80 このうち ID~所属はテキストボックスに連結して 表示しています。 テキストボックスだけでの場合は1ページに一人分で レコードを切り替えて印刷することができますが、 これにレーダーチャートのグラフを加えて成績表のようなものを 作成しようとしています。 よろしくお願いいたします。

  • javascriptのis null or not an object

    http://www.html5.jp/library/sample/graph_radar/examples/sample_graph_radar_1.htmlなのですが、 使いたいのですがie5.5とかでみるとエラーが出ます。 「~is null or not an object」と出ています。これがエラーが出ないようにしたいのですがどうしたらいいでしょうか? 宜しくお願い致します。

  • ひとつのHTMLファイル内にcanvasでグラフを2つ表示したいのです

    ひとつのHTMLファイル内にcanvasでグラフを2つ表示したいのですが 表示できなくて困っています。 以下のサイトを参考に、それぞれ1つのファイルに1つのグラフを表示はできました。 http://www.html5.jp/library/index.html また、グラフを上下入れ替えると後に書いたほうが有効になるようです。 どうしたら表示できるようになるか、わかる方アドバイスをお願いします。 以下headタグ以降をそのまま引用です。 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="ja"/> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title>グラフ</title> <link href="sample_graph.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="rendering-mode.js"></script> <!--[if IE]><script type="text/javascript" src="./html5jp/excanvas/excanvas.js"></script><![endif]--> <script type="text/javascript" src="./html5jp/graph/circle.js"></script> <script type="text/javascript" src="./html5jp/graph/radar.js"></script> <script type="text/javascript"> window.onload = function() { var rc = new html5jp.graph.radar("sample_radar"); if( ! rc ) { return; } var items_radar = [ ["商品A", 3, 3, 2, 3, 1] ]; var params_radar = { aCap: ["A", "B","C", "D", "E"], aMax: 3, aMin: 0, legend: false } ; rc.draw(items_radar, params_radar); }; </script> <script type="text/javascript"> window.onload = function(){ var cg = new html5jp.graph.circle("sample_circle"); if( ! cg ) { return; } var items1 = [ ["A", 9, ], ["B", 3, ], ["C", 0,] ]; cg.draw(items1); }; </script> </head> <body> <div><canvas width="300" height="200" id="sample_radar"></canvas></div> <div><canvas width="300" height="200" id="sample_circle"></canvas></div> </body> </html>

  • Excel VBA チャートグラフの項目追加

    いつも大変お世話になっております。 塗りつぶしレーダーチャートを自動で作成しています。 http://okwave.jp/qa/q8339279.html 回答いただいたマクロを参考に作成しております。 そのグラフの並び替えと、 項目数が少ないものに空の項目を足す 方法があれば、教えてください。 画像のように、チャート項目が1つの場合、 数値が入っていても見ることができません。 そのため、空の項目を追加したいと思っています(Excel上には書き加えたくありません) また、レーダーチャートの並び替えですが、 グラフのタイトルを参考に再配置をしたいのです。 グラフのタイトルに”北海道”と入っていたら 順番に並べ、 その後"青森"と入っているものを検索し 順番に並べ・・・ という感じにしていきたいです。 Excelは2003を使用しております。 回答よろしくお願いいたします。

専門家に質問してみよう