• 締切済み

javascriptでCSVを読み込み表示する方法を探しています。

javascriptでCSVを読み込み表示する方法を探しています。 <div id="hoge"> <ul class="hogehoge"> <li><a href="1行目の1つ目のデータ">1行目の2つ目のデータ</a></li> <li><a href="2行目の1つ目のデータ">2行目の2つ目のデータ</a></li> ・ ・ ・ </ul> </div> で、ulに囲まれた部分をjavascriptで生成させたいのですが・・・ (ulのところのCSS指定は、idではなく、classにしたいです) よろしくお願いいたします。

みんなの回答

  • think49
  • ベストアンサー率59% (285/482)
回答No.4

以下、要求仕様に合わない部分は適宜書き換えてください。(※全角空白は半角空白に置換) gist: 606500 - (rfc4180.js) - GitHub http://gist.github.com/606500 --- var csv; csv = new RFC4180(true); csv.fileToArray('http://example.com/test.csv', function (array) {  var doc, ul, li, a, textNode;  doc = document;  ul = doc.createElement('ul');  li = doc.createElement('li');  a = li.appendChild(doc.createElement('a'));  textNode = a.appendChild(doc.createTextNode(''));  for (var i = 0, l = array.length; i < l; i++) {   a.href = array[i][0];   textNode.nodeValue = array[i][1];   ul.appendChild(li.cloneNode(true));  }  doc.body.appendChild(ul); }); ---

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

まず、javascriptにクライアント側のファイルを入出力する機能はありません。 読み込むなら、csvファイルをサーバー側に置き、AJAX(XMLHttpRequest)で テキストデータとして読み込みます。  AJAXレスポンスデータ(テキスト型式)をカンマと改行文字で分割して、 配列変数にいったん格納し、DOM APIのループ処理でli要素を作成しつつ ターゲットの<ul>の子要素として追加していけばよいかと思います。 データを予めCSV型式からJSON型式にしておけば、分割・格納の処理が 省けますから、もうちょっと楽になります。 JSON型式↓ {data:[ ['1行目の1つ目のデータ','1行目の2つ目のデータ'], ['2行目の1つ目のデータ','2行目の2つ目のデータ'], .... ['n行目の1つ目のデータ','n行目の2つ目のデータ'] ]}; となってれば、 json.data[0][0] //1行目の1つ目のデータ json.data[0][1] //1行目の2つ目のデータ json.data[1][0] //2行目の1つ目のデータ json.data[1][1] //2行目の2つ目のデータ .... json.data[n][0] //n行目の1つ目のデータ json.data[n][1] //n行目の2つ目のデータ ですから、HTML生成の部分は、 function listadd(json){ var ul = document.querySelector("ul.hogehoge"); for(var i=0;i<json.data.length;i++){ var li = document.createElement("li"); var a = document.createElement("a"); a.href = json.data[i][0]; a.appendChild(document.createTextNode(json.data[i][1])); li.appendChild(a); ul.appendChild(li); } } ajaxの部分は、 var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET","xxx.json",true); xmlhttp.send(null); xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState == 4){ if(xmlhttp.status == 200){ var json = eval("("+xmlhttp.responseText+")"); listadd(json); } } でよいかと。 ※古いIEの時は、 document.querySelectorとか new XMLHttpRequest() を適時書き換えてくだされ。

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

No1です。 cvs → csv のタイポです。おはずかしい。

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

ajax cvs あたりをキーにぐぐってみれば、ヒントがいろいろ見つかることでしょう。 たいていのものは、cvsを表形式に表示したり、データをソートしたり、検索するなどのtableデータを対象とする操作になっていると思います。 ご質問の場合は、cvsといってもそのような表ではなさそうなので、前半の読込みだけを利用して、表示するのにはtableの要素の代わりにli要素を生成すればよろしいかと。

関連するQ&A

  • タグを切り替えるJavaScriptについて

    下記のurlを参考にして、タグを切り替えるJavaScriptを使いレイアウトをしています。 http://archiva.jp/web/javascript/tab-menu.html やりたいことは各内容をIDセレクタでくくりたいのです。 <div id="page1">  <h2>page1</h2>  <p>パンクズ</p>  <div class="nav">   <ul id="tab">    <li><a href="#page1"><span>page1を選択中</span></a></li>    <li><a href="#page2"><span>page2</span></a></li>    <li><a href="#page3"><span>pave3</span></a></li>   </ul>  </div>  <p>段落1</p> </div> <div id="page2">  <h2>page2</h2>  <p>パンクズ</p>  <div class="nav">   <ul id="tab2">    <li><a href="#page1"><span>page1</span></a></li>    <li><a href="#page2"><span>page2を選択中</span></a></li>    <li><a href="#page3"><span>pave3</span></a></li>   </ul>  </div>  <p>段落1</p> </div> ...page3 このようにやりたいのですが、JavaScriptがIDセレクタの"tab"にしか対応していないため、他のページにいくとクリックが効かなくなってしまいます。 idセレクタをclassセレクタに設定し直してもidセレクタにしか対応していないため効きません。 tag2とtab3に対応させるためにはどのようにすればいいでしょうか。 よろしくお願いします。

  • jQueryで記事を6列表示にしたいのです。

    jQueryで記事を6列表示にしたいのです。 jQueryで6列表示をしたいと思って試行錯誤をしていたのですが、 全くわからずじまいで、どうしたらいいのかと知恵袋に投稿致しました。 各カテゴリごとに表示をするようになっているのですが、 オールだけ全て表示になります。 5つ残して表示させればいいのですが、各カテゴリが 消えてしまうので、どうしてもオールは6行表示させたいと思っています。 どなたか助けていただけませんでしょうか? jQuery ---------------------------------------------- $(document).ready(function() { $('ul#navi a').click(function() { $(this).css('outline','none'); $('ul#navi .all').removeClass('current'); $(this).parent().addClass('current'); var filterVal = $(this).text().toLowerCase().replace(' ','-'); if(filterVal == 'all') { $('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden'); } else { $('ul#portfolio li').each(function() { if(!$(this).hasClass(filterVal)) { $(this).fadeOut('normal').addClass('hidden'); } else { $(this).fadeIn('slow').removeClass('hidden'); } }); } return false; }); }); HTML ---------------------------------------------- <ul id="navi"> <li class="all"><a href="#">All</a></li> <li><a href="#">CMS</a></li> <li><a href="#">CSS</a></li> <li><a href="#">Javascript</a></li> </ul> <ul id="portfolio"> <li class="cms"><a href="#">Movable Type</a></li> <li class="cms"><a href="#">Movable Type</a></li> <li class="cms"><a href="#">Movable Type</a></li> <li class="css"><a href="#">CSSテンプレート</a></li> <li class="javascript"><a href="#">prototype</a></li> <li class="css"><a href="#">CSSビギナー</a></li> <li class="css"><a href="#">CSSテンプレート</a></li> <li class="css"><a href="#">CSSテンプレート</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">plugin</a></li> </ul>

  • ブラウザでjavascriptのプルダウンメニューが効かない!?

    初めての症状なのですが、、 グローバルメニューの部分でプルダウンメニューを使っているサイト(プルダウン部分はjavascriptを使っています)をサーバーにアップしたのですが、 サーバー上で、プルダウンメニューがでてきません。作動しません。。 ローカルでは、firefox, IE, safari, 全て動作確認済みなのですが、、 もちろん、jsファイルもアップしてあります。 他のポップアップウィンドウなどで使用しているjavascriptは正常に動いてるようなのですが、、、 このような現象ありえるのでしょうか? どなたかお分かりになる方がいらっしゃいましたら、ご教授願えないでしょうか?宜しくお願い致します。 ちなみにプルダウン部分のhtmlです。 javascriptは外部から読み込むようにしてます。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <meta name="keywords" content="Australia, restaurant"> <meta name="description" content="ーー料理" /> <title>Salt | Access</title> <link href="css/import.css" rel="stylesheet" type="text/css" media="all" /> <script src="js/SpryMenuBar.js" type="text/javascript"></script> <script type="text/javascript"><!-- window.onload = function(){ new Spry.Widget.MenuBar("MenuBar1"); } // --></script> </head> <body> <div id="bg2"> <div id="wrapper"> <div id="header"> <div id="h1"><a href="index.html"><img src="img/img_logo.jpg" alt="Salt" width="89" height="83" border="0" /></a></div> <div id="navi" lang="en"> <ul id="MenuBar1" class="MenuBarHorizontal clearfix"> <li id="orange_menu"></li> <li class="first"><a href="index.html" id="first_hover" class="MenuBarItemSubmenu">Top</a></li> <li class="first"><a href="concept.html" id="first_hover" class="MenuBarItemSubmenu">Concept</a></li> <li class="first"><a href="food.html" id="first_hover" class="MenuBarItemSubmenu">Food</a> <ul> <li><a href="lunch3500.html">Lunch</a> <ul> <li><a href="lunch3500.html">Lunch Course 3500</a></li> <li><a href="food.html">Lunch Course 5000</a></li> </ul> </li> <li><a href="raw.html">Dinner</a> <ul> <li><a href="raw.html">Entrees</a></li> <li><a href="main.html">Mains</a></li> <li><a href="vegetable.html">Vegetable Menu</a></li> <li><a href="degustation.html">Degustation</a></li> <li><a href="desserts.html">Desserts and Cafe</a></li> </ul> </li> <li><a href="holiday.html">Holiday Course</a></li> </ul> </li> <li class="first"><a href="wine.html" id="first_hover" class="MenuBarItemSubmenu">Wine</a> <ul> <li><a href="wine.html" class="MenuBarItemSubmenu">Glass</a></li> <li><a href="bubbly_pink.html">Bubbly and PINK</a></li> <li><a href="maritime_white.html">White</a> <ul> <li><a href="maritime_white.html">Maritime</a></li> <li><a href="mediterranean_white.html">Mediterranean</a></li> <li><a href="Altitude_white.html">Altitude</a></li> </ul> </li> <li><a href="maritime_red.html">Red</a> <ul> <li><a href="maritime_red.html">Maritime</a></li> <li><a href="distinctively_red.html">Distinctively Cool</a></li> <li><a href="old_vine.html">Old Vine</a></li> </ul> </li> <li><a href="stickies.html">Stickies</a></li> </ul> <li class="first"><a href="spaces.html" id="first_hover" class="MenuBarItemSubmenu">Spaces</a></li> <li class="first"><a href="access.html" id="first_hover" class="MenuBarItemSubmenu">Access</a></li> <li class="first"><a href="http://www.sweet-w.com/space/salt.html" id="first_hover" class="MenuBarItemSubmenu">Wedding</a></li> <li id="menu_right"></li> </ul> </div> 以下続く。。。

  • プルダウンのメニュー表示について

    JavaScriptでプルダウンメニューを表示する処理を作っているのですが、どうしても求める結果が得られずに困っています。 ○メニュー1 ―――――――――――――――――― ○メニュー2 ―――――――――――――――――― 上記の画面イメージの「メニュー1」をクリックした際に、JavaScriptで下記のようにメニューを表示させたいのです。 ○メニュー1  ●メニュー1-1  ●メニュー1-2  ●メニュー1-3  ●メニュー1-4 ―――――――――――――――――― ○メニュー2 ―――――――――――――――――― ところが、「○メニュー1」のすぐ下にborderが表示されてしまったり、●印のメニューの横幅が正確に伸びません。 こういうときはやはり、ulやdlなどを使わないで大人しくtableを使うべきでしょうか? 何か良い方法がありましたら、ぜひともアドバイスを頂けないでしょうか? 以下がコードの一部です。 [html] <div class="tree">   <a href="javascript:" id="test_01" onclick="getID(this);">○メニュー1</a>   <div class="tree_sub">     <ul>       <li class="left">●メニュー1-1</li>       <li>●メニュー1-2</li>     </ul>     <ul>       <li class="left">●メニュー1-3</li>       <li>●メニュー1-4</li>     </ul>   </div> </div> <div class="tree">   <a href="#">○メニュー2</a> </div> [css] div.tree {   border-bottom:1px solid #000000;   width:365px; } div.tree_sub ul li {   float:left; } div.tree_sub ul li.left {   width:50%; }

  • <ul>から</ul>の間をjavascriptで

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head> <body> <div id="images"> <ul> <li style="width: 354px"><a href="javascript:;">ああ</a></li> <li style="width: 354px"><a href="javascript:;">いい</a></li> <li style="width: 354px"><a href="javascript:;">うう</a></li> <li style="width: 354px"><a href="javascript:;">ええ</a></li> </ul> </div> </body> </html> の<ul>から</ul>の間の<li></li>を1個にしたり5個にしたり、<ul>から</ul>を無くしたり javascriptで動的に変更するスプリクトが知りたいです。

  • クリックで表示、非表示するメガメニュー

    クリックで表示して再度クリックすると非表示になるメガメニューを作ろうと思ってます。 下記のページを参考にjQueryでマウスオーバーによるメガメニューは作成しました。 http://www.skuare.net/test/jmegadropdown.html ただ、jQueryどころかjavascriptも昔少しやった程度しか知識がありませんので、ソースはほぼ上記のページと同じです。 これをクリックでメニュー表示して、再クリックで非表示にするにはどうしたらよいでしょうか? 具体的にはマイクロソフトのページの上にあるようなメニューです。 http://www.microsoft.com/ja-jp/default.aspx 自分の今の知識でjavascriptを使って書いたコードは下記のとおりです。 このように書いていけば出来るとは思うのですが、もっと効率よく出来る方法はあるでしょうか? よろしくお願いします。 function test1() { $("#topnav li .products1 .sub").toggle(); $("#topnav li .sale1 .sub").css("display", "none"); } function test2() { $("#topnav li .products1 .sub").css("display", "none"); $("#topnav li .sale1 .sub").toggle(); } <ul id="topnav"> <li> <a href="#" class="products" onclick="test1()">Products</a> <div class="products1"> <div style="opacity: 0; display: none; width: 600px;" class="sub"> <ul> <li><h2><a href="#">menu1</a></h2></li> <li><a href="#">Link1</a></li> <li><a href="#">Link2</a></li> </ul> <ul> <li><h2><a href="#">menu2</a></h2></li> <li><a href="#">Link1</a></li> <li><a href="#">Link2</a></li> </ul> </div> </div> </li> <li> <a href="#" class="sale" onclick="test2()">Sale</a> <div class="sale1"> <div style="opacity: 0; display: none; width: 450px;" class="sub"> <ul> <li><h2><a href="#">menu</a></h2></li> <li><a href="#">Link - 1</a></li> <li><a href="#">Link - 2</a></li> <li><a href="#">Link - 3</a></li> <li><a href="#">Link - 4</a></li> </ul> </div> </div> </li>

  • text-align centerの違い

    div内にリンクを書くとセンターを基準に表示されるのですが div内にulとliでメニューを組むとセンターを基準に表示されず 左を基準に表示されてしまうのですがどのようにすれば いいものでしょうか? ---CSS--- #hoge { width: 1000px; text-align: center; background: #fff; } ---HTML--- ↓この場合センター表示されます。 <div id="hoge"> <a href="#">hoge</a> </div> ↓この場合センター表示されず左を基準に表示されます。 <div id="hoge"> <ul> <li><a href="#">hoge</a></li> </ul> </div>

    • ベストアンサー
    • HTML
  • javascriptとCSSを使ってのドロップダウンメニュー作成

    CSSとJavaScriptを使って ドロップダウンメニューを作ろうと思っているのですが JavaScriptがうまく作動していないためか FireFoxでは表示されるのですが IE6では動きません。 ご教授お願い致します。 ■index.html <head> <script src="javascript/menu.js" type="text/javascript"></script> </head> <div id="nav"> <ul> <li id="category"><a href="~">category</a> <ul> <li><a href="~">Overview</a></li> <li><a href="~">Overview</a></li> </ul> <ul> <li id="category"><a href="~">category</a> <ul> <li><a href="~">Overview</a></li> <li><a href="~">Overview</a></li> </ul> </div> ■menu.js function menuHover() {var menuItems = d.getElementById("nav").getElementsByTagName("li"); for (var i = 0, miL = menuItems.length; i < miL; i++) { menuItems[i].onmouseover = function() { this.className = "mnhover"; } menuItems[i].onmouseout = function() { this.className = ""; } window.onload = menuHover();

  • Javascriptでプルダウンメニューを作りましたが関数化できません

    <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> function foldmenu(i){ var i; for(j=1;j<=5;j++){ if(i==j) $('#sc'+j).toggle('normal'); else $('#sc'+j).hide(); } $(function(i){ $('#c'+i).click(function(){ for(j=1;j<=5;j++){ if(i==j) $('#sc'+j).toggle('normal'); else $('#sc'+j).hide(); } }); }); } </script> <div id="c1" onClick="foldmenu('1')">1</div> <ul id="sc1"> <li><a href="#">入力画面1-1</a></li> <li><a href="#">入力画面1-1</a></li> </ul> <div id="c2" onClick="foldmenu('2')">2</div> <ul id="sc2"> <li><a href="#">入力画面2-1</a></li> <li><a href="#">入力画面2-2</a></li> </ul> <div id="c3" onClick="foldmenu('3')">3</div> <ul id="sc3"> <li><a href="#">入力画面3-1</a></li> <li><a href="#">入力画面3-2</a></li> </ul> <div id="c4" onClick="foldmenu('4')">4</div> <ul id="sc4"> <li><a href="#">入力画面4-1</a></li> <li><a href="#">入力画面4-2</a></li> </ul> <div id="c5" onClick="foldmenu('5')">5</div> <ul id="sc5"> <li><a href="#">入力画面5-1</a></li> <li><a href="#">入力画面5-2</a></li> </ul> と関数化しましたがうまく動きません。 初期状態では1の部分が開く。 それ以降はクリックした部分が開き開いていた部分は閉じるという感じにしたいです。 縦長のプルダウンメニューです。 たてに1から5が並んでいて、1をクリックすると1と2の間に1の子カテゴリーが表示されます。 困っています。教えてください。

  • ドラックアンドドロップ?

    質問させていただきます。 下記のようなページを作っています。 ドラック&ドロップで画像の移動が出来るページを作成しています。 ドラック&ドロップで画像を動かせるようにはなったのですが、 <div id="menu"> <ul> <li class="co_info_li_line01">担当:hoage</li> <li>03-5452-3711 hoge@hoge.co.jp</li> </ul> </div> など、メニューのulタグ、liタグ等、動かす必要の無いところ まで反応してしまいます。 回避方法がわかりません。 どなたかわかる方ご教授願います、 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 9.0.0.0 for Windows"> <META http-equiv="Content-Style-Type" content="text/css"> <title>Back and forth!</title> <link rel="stylesheet" type="text/css" href="jslib/bill.css" /> <link rel="stylesheet" type="text/css" href="jslib/highslide/highslide.css" /> <script type="text/javascript" src="jslib/prototype.js"></script> <script type="text/javascript" src="jslib/scriptaculous.js?load=effects,dragdrop"></script> <script type="text/javascript" src="jslib/bill.js"></script> <script type="text/javascript" src="jslib/highslide/highslide-with-gallery.js"></script> </head> <body> <div id="head"> <div id="birukenTop"> <a href="http://www.hogehoge.com"><h1><span>検索システム</span></h1></a></div> </div> <div id="menu"> <div id="co_info"> <p class="hello_ID">ようこそ!hoge様</p> <ul> <li class="co_info_li_line01">担当:hoage</li> <li>03-5452-3711 hoge@hoge.co.jp</li> </ul> </div> <div class="clr"></div> <div id="menu_tab"> <!- <ul> <li><img src="images/cmn/head_tag01_2.jpg" alt="検索1" width="161" height="31" border="0" /></li> <li><img src="images/cmn/head_tag02_1.jpg" alt="検索2" width="161" height="31" border="0" /></li> <li><img src="images/cmn/head_tag03_1.jpg" alt="おすすめ物件" width="161" height="31" border="0" /></li> </ul> </div> <div id="menu_tab_foot"> <ul> <li>検索3</li> <li>ページを開く</li> </ul> </div> </div> <div class="clr"></div> <div id="main"> <form name = "imagepic"> <UL id="gloop1"> <li id="2020:1"> <img src="sA01.jpg"> <input type="checkbox" id ="room" name="room" value="2020:1"> <div class="highslide-caption"> <img src="images/search_detail.gif" alt=""> </a><br> </div> </div> </li> <li id="2304:6"> <img src="sB01.jpg"> <input type="checkbox" id ="room" name="room" value="2304:6"> </div> </li> </UL> <span id="parisinfo">順番1:</span> <BR> <P><INPUT size="20" name="hid_gloop1" id="hid_gloop1info" value= "gloop1"></P> <BR> <P><INPUT size="20" name="kekka" id="kekka_id" value= ""></P> <INPUT type="button" name="登録" value="test" onclick="func_search()"> </form> </div> <div id="foot"> <p>2007</p> </div> </div> </body> </html>

専門家に質問してみよう