質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4253閲覧

HTMLで表をソートしたい

pyamathon

総合スコア14

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/01/24 03:17

前提・実現したいこと

htmlで表をフィルターできるようにしたく、
https://webparts.cman.jp/table/filter/
にあるjavascriptを使用しました。

発生している問題・エラーメッセージ

エラーも出ないのに、表が出るだけでソートボタンが出ません。

該当のソースコード

javascript

1<script type="text/javascript"> 2 //=============================================================== 3 // フィルタテーブルの共通変数 設定要! 4 //=============================================================== 5var gTabldID = 'sampleTable'; // テーブルのエリアのIDを設定 6var gTfStartRow = 0; 7var gTfColList = []; // ボタンが配置されている列番号 8var gTfListSave = {}; // フィルタリストの保存状態 9 10window.onload = function() { 11 tFilterInit(); 12} 13 14function tFilterInit(){ 15 16 var wTABLE = document.getElementById(gTabldID); 17 var wTR = wTABLE.rows; 18 var wAddBtn = ''; 19 20 for(var i=0; i < wTR.length; i++){ 21 22 var wTD = wTABLE.rows[i].cells; 23 24 for(var j=0; j < wTD.length; j++){ 25 26 if(wTD[j].getAttribute('cmanFilterBtn') !== null){ 27 28 gTfStartRow = i + 1; 29 30 wAddBtn = '<div class="tfArea">'; 31 wAddBtn += '<svg class="tfImg" id="tsBtn_'+j+'" onclick="tFilterCloseOpen('+j+')"><path d="M0 0 L9 0 L6 4 L6 8 L3 8 L3 4Z"></path></svg>'; 32 wAddBtn += '<div class="tfList" id="tfList_'+j+'" style="display:none">'; 33 wAddBtn += tFilterCreate(j); 34 wAddBtn += '</div>'; 35 wAddBtn += '</div>'; 36 wTD[j].innerHTML = wTD[j].innerHTML+wAddBtn; 37 38 gTfColList.push(j); 39 } 40 } 41 42 if(wAddBtn != ''){ 43 gSortBtnRow = i; 44 break; 45 } 46 47 } 48} 49 50function tFilterCreate(argCol){ 51 52 var wTABLE = document.getElementById(gTabldID); 53 var wTR = wTABLE.rows; 54 var wItem = []; // クリックされた列の値 55 var wNotNum = 0; // 1 : 数字でない 56 var wItemSave = {}; // フィルタに設定した値がキー 57 var rcList = ''; // 返すフィルタリスト 58 59 for(var i=gTfStartRow; i < wTR.length; i++){ 60 var j = i - gTfStartRow; 61 62 wItem[j] = wTR[i].cells[argCol].innerText.toString(); 63 64 if(wItem[j].match(/^[-]?[0-9,.]+$/)){ 65 }else{ 66 wNotNum = 1; 67 } 68 69 } 70 71 if(wNotNum == 0){ 72 wItem.sort(sortNumA); // 数値で昇順 73 }else{ 74 wItem.sort(sortStrA); // 文字で昇順 75 } 76 77 var wItemId = id='tfData_ALL_'+argCol; 78 79 rcList += '<div class="tfMeisai">'; 80 rcList += '<input type="checkbox" id="'+wItemId+'" checked onclick="tFilterAllSet('+argCol+')">'; 81 rcList += '<label for="'+wItemId+'">(すべて)</label>'; 82 rcList += '</div>'; 83 84 rcList += '<form name="tfForm_'+argCol+'">'; 85 86 for(var i=0; i < wItem.length; i++){ 87 88 wVal = trim(wItem[i]); 89 90 if(wVal in wItemSave){ 91 // ---値でチェックボックスが作成されている(重複) ---------- 92 }else{ 93 94 // ---チェックボックスの作成 ------------------------------ 95 wItemId = id='tfData_'+argCol+'_r'+i; 96 rcList += '<div class="tfMeisai">'; 97 rcList += '<input type="checkbox" id="'+wItemId+'" value="'+wVal+'" checked onclick="tFilterClick('+argCol+')">'; 98 rcList += '<label for="'+wItemId+'">'+( wVal=='' ? '(空白)' : wVal )+'</label>'; 99 rcList += '</div>'; 100 101 // ---重複判定用にチェックボックスの値を保存 -------------- 102 wItemSave[wVal]='1'; 103 } 104 } 105 rcList += '</form>'; 106 107 // ------------------------------------------------------------ 108 // 文字抽出のinputを作成 109 // ------------------------------------------------------------ 110 rcList += '<div class="tfInStr">'; 111 rcList += '<input type="text" placeholder="含む文字抽出" id="tfInStr_'+argCol+'">'; 112 rcList += '</div>'; 113 114 rcList += '<div class="tfBtnArea">'; 115 rcList += '<input type="button" value="OK" onclick="tFilterGo()">'; 116 rcList += '<input type="button" value="Cancel" onclick="tFilterCancel('+argCol+')">'; 117 rcList += '</div>'; 118 119 return rcList; 120 121} 122 123function tFilterClick(argCol){ 124 var wForm = document.forms['tfForm_'+argCol]; 125 var wCntOn = 0; 126 var wCntOff = 0; 127 var wAll = document.getElementById('tfData_ALL_'+argCol); // 「すべて」のチェックボックス 128 129 // --- 各チェックボックスの状態を集計する --------------------- 130 for (var i = 0; i < wForm.elements.length; i++){ 131 if(wForm.elements[i].type == 'checkbox'){ 132 if (wForm.elements[i].checked) { wCntOn++; } 133 else { wCntOff++; } 134 } 135 } 136 137 // --- 各チェックボックス集計で「すべて」を整備する ----------- 138 if((wCntOn == 0)||(wCntOff == 0)){ 139 wAll.checked = true; // 「すべて」をチェックする 140 tFilterAllSet(argCol); // 各フィルタのチェックする 141 }else{ 142 wAll.checked = false; // 「すべて」をチェックを外す 143 } 144} 145 146function tFilterCancel(argCol){ 147 148 tFilterSave(argCol, 'load'); // フィルタ条件の復元 149 tFilterCloseOpen(''); // フィルタリストを閉じる 150 151} 152 153function tFilterGo(){ 154 var wTABLE = document.getElementById(gTabldID); 155 var wTR = wTABLE.rows; 156 157 for(var i = 0; i < wTR.length; i++){ 158 if(wTR[i].getAttribute('cmanFilterNone') !== null){ 159 wTR[i].removeAttribute('cmanFilterNone'); 160 } 161 } 162 163 for(var wColList = 0; wColList < gTfColList.length; wColList++){ 164 var wCol = gTfColList[wColList]; 165 var wAll = document.getElementById('tfData_ALL_'+wCol); // 「すべて」のチェックボックス 166 var wItemSave = {}; 167 var wFilterBtn = document.getElementById('tsBtn_'+wCol); 168 var wFilterStr = document.getElementById('tfInStr_'+wCol); 169 170 var wForm = document.forms['tfForm_'+wCol]; 171 // ----------------------------------------------------------- 172 // チェックボックスの整備(「すべて」の整合性) 173 // ----------------------------------------------------------- 174 for (var i = 0; i < wForm.elements.length; i++){ 175 if(wForm.elements[i].type == 'checkbox'){ 176 if (wForm.elements[i].checked) { 177 wItemSave[wForm.elements[i].value] = 1; // チェックされている値を保存 178 } 179 } 180 } 181 182 // ----------------------------------------------------------- 183 // フィルタ(非表示)の設定 184 // ----------------------------------------------------------- 185 if((wAll.checked)&&(trim(wFilterStr.value) == '')){ 186 wFilterBtn.style.backgroundColor = ''; // フィルタなし色 187 } 188 else{ 189 wFilterBtn.style.backgroundColor = '#ffff00'; // フィルタあり色 190 191 for(var i=gTfStartRow; i < wTR.length; i++){ 192 193 var wVal = trim(wTR[i].cells[wCol].innerText.toString()); 194 195 // --- チェックボックス選択によるフィルタ ---------------- 196 if(!wAll.checked){ 197 if(wVal in wItemSave){ 198 } 199 else{ 200 wTR[i].setAttribute('cmanFilterNone',''); 201 } 202 } 203 204 // --- 抽出文字によるフィルタ ---------------------------- 205 if(wFilterStr.value != ''){ 206 reg = new RegExp(wFilterStr.value); 207 if(wVal.match(reg)){ 208 } 209 else{ 210 wTR[i].setAttribute('cmanFilterNone',''); 211 } 212 } 213 } 214 } 215 } 216 217 tFilterCloseOpen(''); 218} 219 220function tFilterSave(argCol, argFunc){ 221 //============================================================== 222 // フィルタリストの保存または復元 223 //============================================================== 224 225 // ---「すべて」のチェックボックス値を保存 ------------------ 226 var wAllCheck = document.getElementById('tfData_ALL_'+argCol); 227 if(argFunc == 'save'){ 228 gTfListSave[wAllCheck.id] = wAllCheck.checked; 229 }else{ 230 wAllCheck.checked = gTfListSave[wAllCheck.id]; 231 } 232 233 // --- 各チェックボックス値を保存 --------------------------- 234 var wForm = document.forms['tfForm_'+argCol]; 235 for (var i = 0; i < wForm.elements.length; i++){ 236 if(wForm.elements[i].type == 'checkbox'){ 237 if(argFunc == 'save'){ 238 gTfListSave[wForm.elements[i].id] = wForm.elements[i].checked; 239 }else{ 240 wForm.elements[i].checked = gTfListSave[wForm.elements[i].id]; 241 } 242 } 243 } 244 245 // --- 含む文字の入力を保存 --------------------------------- 246 var wStrInput = document.getElementById('tfInStr_'+argCol); 247 if(argFunc == 'save'){ 248 gTfListSave[wStrInput.id] = wStrInput.value; 249 }else{ 250 wStrInput.value = gTfListSave[wStrInput.id]; 251 } 252} 253 254function tFilterCloseOpen(argCol){ 255 256 // 257 for(var i=0; i < gTfColList.length; i++){ 258 document.getElementById("tfList_"+gTfColList[i]).style.display = 'none'; 259 } 260 261 // 262 if(argCol != ''){ 263 document.getElementById("tfList_"+argCol).style.display = ''; 264 265 // 266 tFilterSave(argCol, 'save'); 267 268 } 269} 270 271function tFilterAllSet(argCol){ 272 273 var wChecked = false; 274 var wForm = document.forms['tfForm_'+argCol]; 275 276 if(document.getElementById('tfData_ALL_'+argCol).checked){ 277 wChecked = true; 278 } 279 280 for (var i = 0; i < wForm.elements.length; i++){ 281 if(wForm.elements[i].type == 'checkbox'){ 282 wForm.elements[i].checked = wChecked; 283 } 284 } 285} 286 287function sortNumA(a, b) { 288 //============================================================== 289 // 数字のソート関数(昇順) 290 //============================================================== 291 a = parseInt(a.replace(/,/g, '')); 292 b = parseInt(b.replace(/,/g, '')); 293 294 return a - b; 295} 296 297function sortStrA(a, b){ 298 //============================================================== 299 // 文字のソート関数(昇順) 300 //============================================================== 301 a = a.toString().toLowerCase(); // 英大文字小文字を区別しない 302 b = b.toString().toLowerCase(); 303 304 if (a < b){ return -1; } 305 else if(a > b){ return 1; } 306 return 0; 307} 308 309function trim(argStr){ 310 //============================================================== 311 // trim 312 //============================================================== 313 var rcStr = argStr; 314 rcStr = rcStr.replace(/^[  \r\n]+/g, ''); 315 rcStr = rcStr.replace(/[  \r\n]+$/g, ''); 316 return rcStr; 317} 318</script>

試したこと

いろいろなところの空白に入れて見たのですがエラーが出ず、
フィルターテーブルの共通変数を考えたのですがわかりませんでした。

補足情報(FW/ツールのバージョンなど)

macでatomを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2020/01/24 07:11

「ソートしたい」「フィルターできるように」「ソートボタンが出ません」 本当は何がしたいのかはっきりさせましょう
pyamathon

2020/01/24 07:44

html初心者というだけでなく、投稿としても稚拙なものとなってしまい申し訳ありません。 解決いたしました。ありがとうございました。
guest

回答1

0

ベストアンサー

記載URLのHTML,CSS,JSをそのまま使用して手元で確認したところ、普通に表示されました。
ソートボタンも表示され、クリックするとソートも可能でした。

確認したい点としては、HTML,CSS,JSそれぞれどのファイルにまとめていますか?

【それぞれ別のファイルで保存 - 自分はこちらで確認】
css, jsロジックの最初と最後に記載されている<style>, <script>は不要になります。

【1つのhtmlファイルで保存】
css, jsロジックは<head>内に記載してください。

投稿2020/01/24 03:35

vnsa7221

総合スコア348

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pyamathon

2020/01/24 07:46

ご投稿ありがとうございました。 解答者様と同じ通りにしたら (【それぞれ別のファイルで保存 - 自分はこちらで確認】 css, jsロジックの最初と最後に記載されている<style>, <script>は不要になります。) というので解決できました。 ご迅速な解答感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問