
phpが使えない環境にて、jqueryを使用した検索機能を実装中につまづいています。
初心者なりになんとか実装したものの、100件程度のcsvなら問題ないのですが、2000件程度のcsvだと処理にかなり時間がかかってしまい、タイムアウトしてしまいます。
何かいい解決方法はありますでしょうか?
csvの読み込みにはjqueryのプラグインjquery.csv.jsを使用しています。
ご教示いただけますと幸いです。
試したこと
いったんcsvの中身を出力して、クラスのkクラスの付け外しで表示を切り替えているところ等、
処理の効率が悪いことが原因なのは分かるのですが、、、解決策がわからず、八方塞がりの状態です、、、
目指したい挙動
<セレクトボックス>
都道府県:選択してください
市区町村:選択してください
↓
<セレクトボックス>
都道府県:北海道
を選択した場合
↓
csv、1列目に北海道と記載のある市区町村を
<セレクトボックス>
市区町村:選択してください
のセレクトボックスに表示
↓
<セレクトボックス>
都道府県:北海道
市区町村:札幌市中央区
を選択した場合
↓
下記のcsvの情報が出力される
北海道 ,札幌市中央区,○,○,ダミーテキスト,○,○,○,○,○,○,○,○,○
codepen(csvはリンクされていません)
https://codepen.io/fumiya-nakamura/pen/xxPjrmy
css
css
1 /* 表示切り替え用css */ 2 .shityouson option, 3 .ichiran li { 4 display: none; 5 } 6 7 .shityouson option.is-visible, 8 .ichiran li.is-visible { 9 display: block; 10 }
現状の仕組み
①読み込み事にリストを読み込みんでcssで非表示。
セレクトボックスの値によって非表示の状態のリスト
html
html
1 <form action="" id="result"> 2 県:<select name="example1" class="ken"> 3 </select><br><br> 4 市区町村:<select name="example2" class="shityouson"> 5 </select> 6 <br><br> 7 <ul class="ichiran"></ul> 8 </form>
jquery
javascript
1//csvを読み込み 2$(function () { 3 $.get('../../../data.csv', function (data) { 4 var csv = $.csv()(data); 5 $(csv).each(function () { 6 if (this[0] && this[1] && this[2] && this[3] && this[4]) { 7 $("#csv").append("<tr><td>" + this[0] + "</td><td>" + this[1] + "</td><td>" + this[2] + "</td><td>" + this[3] + "</td></tr>"); 8 $(".ken").append('<option class="post" data-ken_name=' + this[0] + '>' + this[0] + "</option>"); 9 $(".shityouson").append('<option class="post" data-shityouson="' + this[0] + '">' + this[1] + "</option>"); 10 11 $(".ichiran").append('<li data-shityouson="' + 12 this[1] + '"><h2>ダミーテキスト</h2><table><tr><th>ダミーテキスト</th><td>' + 13 this[2] + '</td></tr><tr><th>ダミーテキスト</th><td>' + 14 this[3] + '</td></tr></table><br><h2>ダミーテキスト</h2><table><tr><th>ダミーテキスト</th><td>' + 15 this[5] + '</td></tr><tr><th>ダミーテキスト</th><td>' + 16 this[6] + '</td></tr></table><br><h2>ダミーテキスト</h2><table><tr><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th><th>日</th></tr><tr><td>' + 17 this[7] + '</td><td>' + 18 this[8] + '</td><td>' + 19 this[9] + '</td><td>' + 20 this[10] + '</td><td>' + 21 this[11] + '</td><td>' + 22 this[12] + '</td><td>' + 23 this[13] + '</td></tr></table><br><h2>ダミーテキスト</h2><p>' + 24 this[4] + '</p><br><h2>ダミーテキスト</h2><p>' + 25 this[4] + '</p></li>'); 26 } 27 }) 28 }) 29}); 30 31window.addEventListener('load', function () { 32 //同じ都道府県を削除 33 $('.post').filter( 34 function () { 35 const t = $(this).text(); 36 return this !== $(`.post:contains('${t}')`).get(0); 37 } 38 ).remove(); 39 40 //都道府県によって市町村を表示 41 $('.ken').change(function () { 42 var ken_name = $(this).val(); 43 $('.shityouson option').each(function (index) { 44 const userId = ken_name; 45 const data = document.querySelectorAll('[data-shityouson="' + userId + '"]'); 46 $(this).removeClass('is-visible'); 47 $('[data-shityouson="' + userId + '"]').addClass('is-visible'); 48 }); 49 }); 50 51 //該当する市町村の情報を表示 52 $('.shityouson').change(function () { 53 const result = $('.shityouson').val(); 54 $(".ichiran li").each(function (index) { 55 $(this).removeClass('is-visible'); 56 var li_result = $(this).attr('data-shityouson'); 57 if (li_result === result) { 58 $(this).addClass('is-visible'); 59 } 60 }); 61 }); 62});
csv
csv
1北海道 ,札幌市中央区,○,○,ダミーテキスト,○,○,○,○,○,○,○,○,○ 2北海道 ,札幌市北区,○,○,ダミーテキスト,○,○,○,○,○,○,○,○,○ 3〜 4沖縄県 ,八重山郡与那国町,○,○,ダミーテキスト,○,○,○,○,○,○,○,○,○


回答1件
あなたの回答
tips
プレビュー