• ベストアンサー

再挑戦:分割子が混在したデータの成型コードは?

<h1>JS 分割子が混在したデータの成型コードは?</h1> <pre> さまざまな分割子が混在したデータがあります。 これを1つの分割子に統一するには どんなコードでできますか? 【仕様】 [分割子] ・二重引用符 ・一重引用符 ・タブ区切り  ・・・ 単語と単語の間 ・半角空白       同上 ・パイプ(縦棒)・・・ 行頭と末尾に有る、無いの2ケース [データ型式] (注) 適合しないデータが含まれています 1列目:3桁カンマ区切り 2列目:文字データ 3列目:整数・小数(負数を含む) [備考] ・空白行は詰める ・エラーデータは「****」と出力 </pre> <pre id="data"> 1,234 あさがお 23.45 7,904 みかん 0.92 5,021 うさぎ 5.63 8,753 えんどう 1.724 2,657 いちご 10.87 9,841 ひまわり 77.33 432 ベニバナ 4.09 7,123 メロン 98.14 432 しらゆり 4.09 6,722 ナツメグ 65.1 "333,333","fish","67.82" "98,765","animal","26.5" "216,017","lion","5.74" "60,580","cat","31.07" "43,604","river","25.94" '90,742','lamp','0.45' '23,809','teacup','7.23' '3,582','dish','80.72' '5,600','stove','59.35' '4,65','soap','23.84' 9,001|violin|28.03 5,345|guitar|4.52 |4,890|goldfish|135.45| |2,8760|mountain|79.43| |5,032|radio|17.03| </pre> <div> <button id="button1">成型する</button> </div> <textarea id="output" cols=60 rows=30></textarea> <script> //例 button1.onclick = function(){ // step.1 データから、分割子を除いた単語として配列に格納 // step.2 エラーデータは「****」に変換 // step.3 分割子を指定してテキストエリアに出力 }; </script> くわしい方のお力添えをお待ちしております。

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

  • ベストアンサー
  • fji-jp
  • ベストアンサー率84% (11/13)
回答No.5

同じブラウザ環境(Google Chrome バージョン: 113.0.5672.127(Official Build) (64 ビット))で試して見ましたが、再現せずでした。 step0を下記のコードに差し替えてみたらどうなるでしょうか。 // step.0 分割子をパイプに統一し、不要な引用符と行頭行末パイプ除去 var text = data.innerText.replace(/\t+| +|","|','/g, '|').replace(/"|'|^\||\|$/gm, '');

retorofan
質問者

お礼

完璧な結果出力でした。 非の打ちどころがないコードで、 とても良い勉強になりました。 どうもありがとうございました。 m(_ _)m

retorofan
質問者

補足

確認した結果、どの場合も正常に動作しました。

その他の回答 (4)

  • fji-jp
  • ベストアンサー率84% (11/13)
回答No.4

改めて1つの分割子に統一するコードを作成してみました。 <h1>JS 分割子が混在したデータの成型コードは?</h1> <pre> さまざまな分割子が混在したデータがあります。 これを1つの分割子に統一するには どんなコードでできますか? 【仕様】 [分割子] ・二重引用符 ・一重引用符 ・タブ区切り  ・・・ 単語と単語の間 ・半角空白       同上 ・パイプ(縦棒)・・・ 行頭と末尾に有る、無いの2ケース [データ型式] (注) 適合しないデータが含まれています 1列目:3桁カンマ区切り 2列目:文字データ 3列目:整数・小数(負数を含む) [備考] ・空白行は詰める ・エラーデータは「****」と出力 </pre> <pre id="data"> 1,234 あさがお 23.45 7,904 みかん 0.92 5,021 うさぎ 5.63 8,753 えんどう 1.724 2,657 いちご 10.87 9,841 ひまわり 77.33 432 ベニバナ 4.09 7,123 メロン 98.14 432 しらゆり 4.09 6,722 ナツメグ 65.1 "333,333","fish","67.82" "98,765","animal","26.5" "216,017","lion","5.74" "60,580","cat","31.07" "43,604","river","25.94" '90,742','lamp','0.45' '23,809','teacup','7.23' '3,582','dish','80.72' '5,600','stove','59.35' '4,65','soap','23.84' 9,001|violin|28.03 5,345|guitar|4.52 |4,890|goldfish|135.45| |2,8760|mountain|79.43| |5,032|radio|17.03| </pre> <div>分割子:<select id="divType"></select></div> <textarea id="output" cols=60 rows=30></textarea> <script> var divTypes = [ {name:'二重引用符', quot:'"', sep:',', outer:''}, {name:'一重引用符', quot:"'", sep:',', outer:''}, {name:'タブ区切り', quot:'', sep:'\t', outer:''}, {name:'半角空白', quot:'', sep:' ', outer:''}, {name:'パイプ区切り', quot:'', sep:'|', outer:''}, {name:'パイプ行頭行末', quot:'', sep:'|', outer:'|'} ]; function makeOpt(i, v) {let opt=document.createElement("option"); opt.setAttribute("value", i); opt.innerHTML = v; return opt;} divTypes.forEach((v,i)=>{divType.innerHTML = divType.innerHTML + '<option value="' + i + '">' + v.name + '</option>';}); doChoose(); function doChoose() { // step.0 分割子をパイプに統一し、不要な引用符と行頭行末パイプ除去 var text = data.innerText.replace(/\t| |","|','/g, '|').replace(/"|'|^\||\|$/gm, ''); // step.1 データから、分割子を除いた単語として配列に格納 var csv = text.split(/\r\n|\n|\r/).filter(s=>s).map(s=>s.split('|')); // step.2 エラーデータは「****」に変換 csv=csv.map(s=>s.map((v,i)=>(i!=0||v==Number(v.replace(/,/g,'')).toLocaleString())?v:'****')); // step.3 分割子を指定してテキストエリアに出力 var f = divTypes[divType.value]; output.value = csv.map(v=>(f.outer + v.map(v=>(f.quot + v + f.quot)).join(f.sep)) + f.outer).join('\r\n'); }; divType.addEventListener('change', doChoose); </script>

retorofan
質問者

補足

お力添えを頂きまして感謝申し上げます。 下記のブラウザにて確認してみました。 Google Chrome バージョン: 113.0.5672.127(Official Build) (64 ビット) 検証結果は下記のとおりになりました。(元データは3列) ■二重引用符・・・一部に5列あり "1,234","","あさがお","","23.45" "7,904","","みかん","","0.92" "5,021","","うさぎ","","5.63" "8,753","","えんどう","","1.724" "2,657","","いちご","","10.87" ■一重引用符・・・一部に5列あり '1,234','','あさがお','','23.45' '7,904','','みかん','','0.92' '5,021','','うさぎ','','5.63' '8,753','','えんどう','','1.724' '2,657','','いちご','','10.87' ■タブ区切り・・・一部に5列あり(#に置換して確認) 7,904##みかん##0.92 5,021##うさぎ##5.63 8,753##えんどう##1.724 2,657##いちご##10.87 ■半角空白・・・一部に5列あり(#に置換して確認) 7,904##みかん##0.92 5,021##うさぎ##5.63 8,753##えんどう##1.724 2,657##いちご##10.87 ■パイプ区切り・・・一部に5列あり 1,234||あさがお||23.45 7,904||みかん||0.92 5,021||うさぎ||5.63 8,753||えんどう||1.724 2,657||いちご||10.87 ■パイプ行頭行末・・・一部に5列あり |1,234||あさがお||23.45| |7,904||みかん||0.92| |5,021||うさぎ||5.63| |8,753||えんどう||1.724| |2,657||いちご||10.87| もう少し作り込めば完成できそうです!

  • fji-jp
  • ベストアンサー率84% (11/13)
回答No.3

こちらでの検証結果では、前回提示した引用符を残したコードでは、添付ファイルの通り問題点は発生せずに正常動作しています。 そのため、検証いただいた結果が再現しないため、これ以上の手直しおよび力添えは、不可となります。 問題点に挙げられた元データに3桁区切り記号が含んでいても、半角空白が正常出力で、タブ区切りが5列になる箇所がある点については、最初に「\t」を「|,」に置換すると再現はしましたが、提示したコードではありません。

retorofan
質問者

補足

お力添えをいただき、感謝申し上げます。 添付写真のものは No.2 コードでの出力結果ですよね? この場合、 ・1~6行目はカンマ区切りで 4列になっている ・二重引用符と一重引用符が一部のみで、  全体が統一されていない 以上の点が惜しいです。 「1つの分割子に統一する」というテーマ それが問題です。

  • fji-jp
  • ベストアンサー率84% (11/13)
回答No.2

引用符を残した下記コードでどうでしょうか。 <script> //例 button1.onclick = function(){ // step.0 分割子をパイプに統一し、行頭行末パイプを除去 var text = data.innerText.replace(/\t| /g, '|').replace(/","/g, '"|"').replace(/','/g, "'|'").replace(/^\||\|$/gm, ''); // step.1 データから、分割子を除いた単語として配列に格納 var csv = text.split(/\r\n|\n|\r/).filter(s=>s).map(s=>s.split('|')); // step.2 エラーデータは「****」に変換 csv=csv.map(s=>s.map((v,i)=>(i!=0||v.replace(/"|'/g,'')==Number(v.replace(/,|"|'/g,'')).toLocaleString())?v:'****')); // step.3 分割子を指定してテキストエリアに出力 output.innerHTML = csv.map(i=>i.join(',')).join('\r\n'); }; </script>

retorofan
質問者

補足

ご回答ありがとうございます。 >引用符を残した下記コードでどうでしょうか。 下記は検証結果です。 fji-jpさんのコードによる出力結果 1,234,,あさがお,,23.45 7,904,,みかん,,0.92 5,021,,うさぎ,,5.63 8,753,,えんどう,,1.724 2,657,,いちご,,10.87 9,841,ひまわり,77.33 432,ベニバナ,4.09 7,123,メロン,98.14 432,しらゆり,4.09 6,722,ナツメグ,65.1 "333,333","fish","67.82" "98,765","animal","26.5" "216,017","lion","5.74" "60,580","cat","31.07" "43,604","river","25.94" '90,742','lamp','0.45' '23,809','teacup','7.23' '3,582','dish','80.72' '5,600','stove','59.35' ****,'soap','23.84' 9,001,violin,28.03 5,345,guitar,4.52 4,890,goldfish,135.45 ****,mountain,79.43 5,032,radio,17.03 [修正箇所] ・出力先はテキストエリアなので  × output.innerHTML = csv.map(i=>i.join(',')).join('\r\n');  ○ output.value = csv.map(i=>i.join(',')).join('\r\n'); [問題点] ・列数と引用符について  >3列のデータのはずが、5列になる箇所がある  >引用符が付いていないデータがある  (例)1,234,,あさがお,,23.45 ・元データに3桁区切り記号を含んでいるため、  分割子にカンマのみは不適合 もう少し手直しが必要のようです。 よろしくお願いいたします。

  • fji-jp
  • ベストアンサー率84% (11/13)
回答No.1

下記のコードでどうでしょうか <script> //例 button1.onclick = function(){ // step.0 分割子をパイプに統一し、不要な引用符と行頭行末パイプ除去 var text = data.innerText.replace(/\t| |","|','/g, '|').replace(/"|'|^\||\|$/gm, ''); // step.1 データから、分割子を除いた単語として配列に格納 var csv = text.split(/\r\n|\n|\r/).filter(s=>s).map(s=>s.split('|')); // step.2 エラーデータは「****」に変換 csv=csv.map(s=>s.map((v,i)=>(i!=0||v==Number(v.replace(/,/g,'')).toLocaleString())?v:'****')); // step.3 分割子を指定してテキストエリアに出力 output.innerHTML = csv.map(i=>i.join(',')).join('\r\n'); }; </script>

retorofan
質問者

補足

説明不足で申し訳ございません。 ・二重引用符 ”AAA”,”BBB”,”CCC” ・一重引用符 'DDD','EEE','FFF' 上記は引用符で囲んでカンマ区切りになります。

関連するQ&A

  • JS 分割子が混在したデータを成型するには?

    <h1>JS 分割子が混在したデータを成型するには</h1> <pre> さまざまな分割子が混在したデータがあります。 これを1つの分割子に統一するには どんなコードでできますか? replaceメソッドを用いたら 芋ずる式のようになってしまい、coolじゃない(?) 【仕様】 [分割子] ・二重引用符 ・一重引用符 ・タブ区切り  ・・・ 単語と単語の間 ・半角空白       同上 ・パイプ(縦棒)・・・ 行頭と末尾に有る、無いの2ケース [データ型式] 1列目:3桁カンマ区切り 2列目:文字データ 3列目:整数・小数(負数を含む) [備考] 空白行は詰めて作表する </pre> <pre id="data"> 1,234 あさがお 23.45 7,904 みかん 0.92 5,021 うさぎ 5.63 8,753 えんどう 1.724 2,657 いちご 10.87 9,841 ひまわり 77.33 432 ベニバナ 4.09 7,123 メロン 98.14 432 しらゆり 4.09 6,722 ナツメグ 65.1 "333,333","fish","67.82" "98,765","animal","26.5" "216,017","lion","5.74" "60,580","cat","31.07" "43,604","river","25.94" '90,742','lamp','0.45' '23,809','teacup','7.23' '3,582','dish','80.72' '5,600','stove','59.35' '4,65','soap','23.84' 9,001|violin|28.03 5,345|guitar|4.52 |4,890|goldfish|135.45| |2,8760|mountain|79.43| |5,032|radio|17.03| </pre> <div> <button id="button1">成型する</button> </div> <textarea id="output" cols=60 rows=30> </textarea> <script> //例 二重引用符で統一する let format ='"'; button1.onclick = function(){ // ??? }; </script> 正規表現にくわしい方のお力添えをお待ちしております。

  • 改行コードを含む文字列の分割について

    Java初心者です。 Java言語で、ある文字列を"\r\n"だけを区切り記号として別々の文字列にしたいのですがうまくいきません。 StringTokenizerを使って、 StringTokenizer(msg,"\\r\\n") のようにやって見たのですが、これだと"\r"や"\n"まで区切り記号として分割されてしまいました。 "\r\n"だけを区切り記号として処理するにはどうしたらいいでしょうか? 例えばPOSTで送信した"データ1\r\nデータ2\r\nデータ3\nテスト"という文字列を、 "データ1"、"データ2"、"データ3\nテスト"の3つにしたいのですが。

    • ベストアンサー
    • Java
  • JS ベタ打ち原稿を成型して出力するには?

     JavaScript ベタ打ち原稿を成型して出力するには? 未編集の洋楽プレイリストがあります。 これを、次の書式どおりに成型することにします。 [成型後の書式] 2桁の連番_歌手名_-_曲名_(分:秒) or (西暦年) [_:半角空白] <仕様> ・jQuery等のプラグインは不使用のこと ・「連番、歌手名、曲名、演奏時間」が1行ずつのまとまり ・演奏時間の箇所が 西暦年の場合がある ・歌手名、曲名に 次の記号が含まれている場合がある  アンパサンド、半角括弧、アポストロフィ、バッククォート (& ( ) ’ `) 手順1 テキストエリア「genkou」にベタ打ち原稿を貼り付けます。 手順2 実行ボタンを押すと、テキストエリア「result」に成型して出力します。 そうするためには、どのような JavaScriptコードになりますか。 [HTML] <textarea id="genkou" cols="100" rows="30"> 01 - Artie Garr (a.k.a Art Garfunkel) - Beat Love (1959) 02 - Mark Dinning - Loving Touch (2:10) 03 - Petty Booka - Bla Bla Bla Cha Cha Cha (2:28) 04 - Sam Fletcher - I'd Think It Over (2:38) 05 - Untouchables - Raisin Sugar Cane (2:11) 06 - Esther Phillips - Just Say Goodbye (2:18) 07 - Eddie Holland - Jamie (2:23) 08 - Della Reese - Tea For Two (2:13) 09 - Danny Winchell - Por Favor (2:10) 10 - Clyde Otis - Jungle Drums (1:56) 11 - Christine Quaite - Your Nose Is Gonna Grow (2:10) 12 - Martin Bet - I Know A Girl (2:01) 13 - Arthur Alexander - Anna (2:52) 14 - Mickey & Sylvia - Love Is Strange (2:54) 15 - Richard Anthony - Cin Cin (Chin Chin) (3:02) 16 - Sarah Vaughan - Broken Hearted Melody (2:55) 17 - Aphrodite's Child - Rain And Tears (1968) 18 - Nico Landers - Stil In De Straten (2:26) 19 - Ginny Arnell - He's My Little Devil (2:10) 20 - Azie Mortimer - Lips (2:22) 21 - Ava Max - Salt (2019) 22 - Gun`s N Roses - Don't Cry (1991) 23 - Sarah Vaughan - Smooth Operator (2:27) 24 - The Weeknd - Save Your Tears (2020) 25 - Martha Reeves & The Vandellas - Nowhere To Run </textarea> <div> <button id="btn">実行ボタン</button> </div> <textarea id="result" cols="100" rows="10" placeholder="成型後" readonly></textarea> </textarea>

  • load dataするときに、最後の列(文字列)がちゃんと入らない

    load data infile~で一括登録する上で、 最後の列に、空白またはnull指定しても、 ちゃんと登録されてくれません。 create table ~( id char(12) not null primary key, 1R varchar(12), 2R varchar(12), 3R varchar(12)); 実際に一括登録するデータは以下です(スペースはタブ区切り) 2R・3Rに対して、このように実験的に入れてみました。 1 aa1 \N \N\n >Nullを指定 2 bb1 \n   >タブ区切りの空白指定 3 cc1\n    >タブ自体をを書かない 登録結果は以下のようになりました。 1 aa1 NULL N 2 bb1 3 cc1 NULL NULL id1の行については、2RにはNULL値が登録できたのですが、 3Rには「N」と表示されています。 しかし、ただのNではないみたいで、 (where 3R like 'N_')としないとヒットしません。 また、'_'は空白ではないらしく正体不明です。 id2の行については、2Rは空白になっていますが、 3Rは(where 3R = '')としてもヒットせず、 なぜか(where 3R like '_')にヒットします。 これもまた、'_'は空白ではありません。 冒頭にも書きましたが、このように 最後の列にうまく空白やNullが登録されません。 id3の行のように、 値のある列までで閉じてあげると綺麗に入ります。 力ずくでid3のように成形してあげることもできますが、 一括登録という便利な機能を使う上で何か違う気がします。 環境 windowsXP+MySQL5.0 文字数制限のためあまり詳しく掛けませんでした。不足な点があれば補足致しますので、 よろしくおねがいします。

    • ベストアンサー
    • MySQL
  • エクセル教えてください 重複データの削除方法

    エクセルは良く使っていますが、レベルは初級の上です。 同一セル内に複数の重複データが入っていますが、重複しないものを抽出し 新しいセルに入れたいと思っています。 重複データの区切りは、セミコロン";" パイプ区切り"|",空白、改行が混在しています。 重複しないものを、新しいセルに入れたいのですが、どのようにしたら良いでしょうか? 新しいセルでのデータ区切りは、コンマ(又はパイプ区切り)にしたいと思っています。   例で説明します。 A列(番号) B列(元のデータ)             C列(重複を除いたデータ)  1      タイ ベトナム 中国|タイ|タイ         タイ,ベトナム,中国    2      インド ベトナム|インド タイ |インド 中国  インド,ベトナム,タイ,中国 ※B列のデータを重複を除いて、C列に入れたいと思っています ※2行のデータを例にしましたが、実際には2万くらいデータがあります ※マクロは全くわからないので、多少の手作業があっても関数レベルで やれると助かります。(いまから、マクロを勉強してもよいでしょうか??) 良い方法をアドバイスいただければ助かります。

  • オープンオフィス・セルの分割

    オープンオフィスでcsvデータを読み込むと 一つのセルにすべてが固まって表示されてしまうので データ→テキストから列へ で、区切り記号を選択して増やしてみましたが 1列目は分割されたのですが、2列目以降が分割されないままになってしまいます これはどうやったらきれいに分割されるんでしょうか? 過去質問などでも探してみましたが、よくわからず・・ それで質問させていただいた次第です 申し訳ありませんが、当方PCがすごく苦手で csvファイルを触るのも今回が初めてのド素人です。 できましたら噛み砕きすぎるくらい噛み砕いて教えて頂けると助かります。 お手数おかけしますがどうぞよろしくお願いいたします。

  • JavaScript 手作業から解放されたいのです

    今、インラインフレームにデータを読み込んで作表するサンプルを作成中です。 インラインフレームには select() メソッドが使えないために 手作業でテキストエリアに copy&pasteしている状態です。 この手作業から解放されたいのですが、どういうコードでできますか? スキルある方のお力添えをお待ちしております。 【親ページ】parent.html <body> <div>parent.html 親ページです.</div> <style> body { background: lavender; } .wrap { list-style-type: none; display: flex; width: 640px; padding: 1.5em; background: lightgreen; border-radius: 10px; } form > div { margin-top: 1em; font-weight: bold; } label { display: block; } pre b { color: red; } #iframe3 { width: 300px; height: 160px; background: #eee; } #textArea { margin-left: 10px; width: 300px; height: 160px; } </style> <pre> 【テーマ】子ページ内のデータで作表する <条件> ・子ページの情報で親ページに作表する ・ローカル環境(当然 Ajax(XMLHttpRequest)は対象外、new FileReader不使用) ・ファイルは、親子とも同じ場所 ・現在は、<b>読込ファイル選択 ▶ IFRAMEをCTRL+C ▶ TEXTAREAでCTRL+V ▶ 作表ボタン押下 ▶ 作表</b>  理想は、手作業を省略して、<b>読込ファイル選択 ▶ 作表</b> </pre> <ul class="wrap"> <li>(1)[IFRAME](理想は非表示に) <iframe id="iframe3" src="./20230515-child.tsv" title="子ページ"> </iframe> </li> <li> (2)[TEXTAREA](理想は非表示に) <textarea id="textArea" placeholder="貼付場所"></textarea> </li> </ul> <form name="form1"> <div>読込データファイルの選択</div> <label><input name="cbox" type="radio" value="0" checked> 1.TSVファイル (タブ区切り .tsv)</label> <label><input name="cbox" type="radio" value="1"> 2.HTMLファイル</label> </form> <p> <button id="button1">作表</button> <table id="listTable"></table> </p> <script> (function () { //エレメント const iframe = document.getElementById('iframe3'); const table = document.getElementById('listTable'); const textArea = document.getElementById('textArea'); const button1 = document.getElementById('button1'); //読み込みファイルの選択 document.form1.onchange = function(event) { let n = event.target.value; iframe.src = "./child." + ["tsv","html"][n]; } //作表処理 button1.onclick = function (){ // 値を全選択してコピー (※使用不可能) // iframe.select(); // var result = document.execCommand("copy"); //------------------------------------------------------------- // 整形 文字データの配列化 作表 // (略) //------------------------------------------------------------- }; })(); </script> </body> 【子ページ1】child.tsv 番号 名称 半径 衛星個数 1 水星 2,439 0 2 金星 6,051 0 3 地球 6,378 1 4 火星 3,396 2 5 木星 71,492 95 6 土星 60,268 104 7 天王星 25,559 27 8 海王星 24,764 14 9 冥王星 1,188 5 【子ページ2】child.html <pre> 番号 名称 半径 衛星個数 1 水星 2,439 0 2 金星 6,051 0 3 地球 6,378 1 4 火星 3,396 2 5 木星 71,492 95 6 土星 60,268 104 7 天王星 25,559 27 8 海王星 24,764 14 9 冥王星 1,188 5 </pre>

  • OpenOfficeでデータファイルを開く

    OpenOfficeのcalculatorでデータファイル(数値が並んだただのアスキーファイル) を開きたいのですが、どうしてもwriterが起動してしまって calculatorで開くことができません。 excelでやるように、空白区切りでセルごとのデータを 分割して入れたいのですが、どのようにすればいいでしょうか。 宜しくお願いします。

  • substringで文字を分割

    全角80桁の文字列を全角空白を利用して4分割したいのですが 下記にご質問内容を記載します。 String str = new String(住所漢字); Matcher j = pattern2.matcher(住所漢字); Pattern pattern2 = Pattern.compile("^.{1,20} ");で 文字列の先頭から始まって半角空白で終わる最大21文字 (最後の全角空白を含む)にマッチさせた文字列に Matcher j = pattern2.matcher(住所漢字); while(j.find()) { 正規表現で抜き出した文字列の文字カウントをチェック int mojiLength = i.group().length(); String iNewString = tmp.substring(mojiLength); out.print(j.group()+","+iNewString); として、正規表現でマッチさせた文字列以降を substringで抜き出したのですが それ以降の文字列も同じようにして substringで抜き出した20文字以降の文字列に 先に設定した正規表現を利用して分割して カンマ区切の4分割にしたいのですが この先の方法が分からず色々調べている最中です。 すいませんがぜひアドバイスお願いします。

    • ベストアンサー
    • Java
  • ボタンを押すとデータ表示、再度押すと非表示

    ボタンを押すとデータが表示されるjqueryを利用したjavascriptがあります。 このボタンを再度クリックすると非表示にしたいと考えています。 奇数回クリック=表示 偶数回クリック=非表示 という形です。 ご教授いただきたくお願いいたします。 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> <script type="text/javascript"> jQuery(function($){ $("#btn0").click(function (e) { e.preventDefault(); $("#data").show(); }); </script> <button class="button18" id="btn0">ボタン</button> <div id="data" style="display:none"> データ </div>