前提・実現したいこと
<thead>の<th>内に閉じるボタンを設置し、そのボタンをクリックすることで クリックされた列が削除されるようになってほしい。 例えば、1列目の閉じるボタンを押して削除した後に、 4列目の閉じるボタンを押して削除できるように、 同じ動作を繰り返し別の列もできるようになってほしい。発生している問題・エラーメッセージ
該当の列を複数取得すことはできたのですが、
該当の列のindexを取得するやり方がわかりません。
該当のソースコード
html
1<div><!--チェックボックス--> 2 <ul> 3 <li> 4 <label for="item-1"><input type="checkbox" value="1" id="item-1">アイテム1</label> 5 </li> 6 <li> 7 <label for="item-2"><input type="checkbox" value="2" id="item-2">アイテム2</label> 8 </li> 9 </ul> 10</div> 11 12<div><!--ボタン--> 13 <button class="execution">実行</button> 14 <button class="reset">リセット</button> 15</div> 16 17<table> 18 <thead> 19 <tr> 20 <td></td> 21 <th data-selection="1"> 22 <div><p class="clm_close">×</p>アイテム1-1</div> 23 </th> 24 <th data-selection="1"> 25 <div><p class="clm_close">×</p>アイテム1-2</div> 26 </th> 27 <th data-selection="2"> 28 <div><p class="clm_close">×</p>アイテム2-1</div> 29 </th> 30 </tr> 31 </thead> 32 <tbody> 33 <tr> 34 <th>テキストA</th> 35 <td>テキストA-1</td> 36 <td>テキストA-2</td> 37 <td>テキストA-3</td> 38 </tr> 39 <tr> 40 <th>テキストB</th> 41 <td>テキストB-1</td> 42 <td>テキストB-2</td> 43 <td>テキストB-3</td> 44 </tr> 45 </tbody> 46</table>
css
1.hide{ 2 display: none; 3} 4table thead th div{ 5 position: relative; 6} 7table thead th div .clm_close{ 8 position: absolute; 9 top: 1px;left: 1px; 10}
jquery
1$(function() { 2 // 実行ボタンを押すとチェックされていない該当列は消える 3 $('.execution').click(function() { 4 let values = [], 5 col_index = []; 6 7 $('[type="checkbox"]:not(:checked)').each(function(){ 8 values.push(parseInt($(this).val())); 9 }); 10 11 if (values) { 12 $('thead tr').children().each(function(index, element){ 13 if ($.inArray($(element).data('selection'), values) != -1) { 14 col_index.push(index); 15 } 16 }); 17 18 $.each(col_index, function(index, value){ 19 $('tr').each(function(){ 20 $(this).children().eq(value).addClass('hide'); 21 }); 22 }); 23 } 24 }); 25}); 26 27 28$(function() { 29 // 実行ボタンを押すとチェックされた該当列は残る 30 $('.execution').click(function() { 31 let values_1 = []; 32 let col_index_1 = []; 33 34 $('[type="checkbox"]:checked').each(function(){ 35 values_1 .push(parseInt($(this).val())); 36 }); 37 38 if (values_1 ) { 39 $('thead tr').children().each(function(index, element){ 40 if ($.inArray($(element).data('selection'), values_1 ) != -1) { 41 col_index_1.push(index); 42 } 43 }); 44 45 $.each(col_index_1, function(index, value){ 46 $('tr').each(function(){ 47 $(this).children().eq(value).removeClass('hide'); 48 }); 49 }); 50 } 51 }); 52}); 53 54//両方チェックすると全て表示 55$(function() { 56 $('.execution').click(function() { 57 if ($('[value="1"]').prop('checked') && $('[value="2"]').prop('checked')) { 58 $('.hide').removeClass('hide'); 59 }; 60 }) 61}); 62 63 64//リセットボタンを押すと全て表示 65$('.reset').click(function() { 66 $('.hide').removeClass('hide'); 67 $('[type="checkbox"]').prop('checked', false); 68}); 69
試したこと
jquery
1$(function() { 2 $('.clm_close').click(function() { 3 //.clm_closeをクリックしたセルの<th>に.hideクラスを追加して消す 4 $(this).parents('th').addClass('hide'); 5 6 let values_2 = []; 7 let col_index_2 = []; 8 9 //①.hideクラスがついたセルの値を取得(したつもり) 10 $('.hide').each(function(){ 11 values_2.push($(this)); 12 }); 13 14 //②.hideクラスがついた該当する列のindexを取得したい 15 if (values_2) { 16 $('thead tr').children().each(function(index, element){ 17 if ($.inArray($(element).data('selection'), values_2) != -1) { 18 col_index_2.push(index); 19 } 20 }); 21 22 // 全ての行について、該当列にhideクラスを追加 23 $.each(col_index_2, function(index, value){ 24 $('tr').each(function(){ 25 $(this).children().eq(value).addClass('hide'); 26 }); 27 }); 28 } 29 }); 30});
②のcol_index_2で該当する列のindexを取得したかったのですが、
console.logで見ても何も取得されていませんでした。
①の時点で間違えているのか、最初から間違えているのか、わからなくなってしまいました。
ご教授のほどよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/26 08:08