表題の件で質問させてください。
WEBアプリにHTMLのTableを配置し、選択した行の色を変えたいと思っています。
件数 | 日付 | 入力者 |
---|---|---|
1 | 2019-01-20 | Aさん |
2 | 2019-01-21 | Bさん |
1行目をクリックすると1行の背景色が変わり
2行目をクリックすると1行目の背景色はリセットされ2行目の背景色が変わる
1行目をクリックすると2行目の背景色はリセットされ1行目の背景色が変わる
というように(分かりにくくてすいません)クリックされた行のみ背景色を変え、それ以外の行の背景色はデフォルトにしたいです
同様のケースを調べながら以下のサンプルを作ってみたのですが、1行目をクリックして色が変わるのは良いのですが、2行目をクリックしたときは1行目の背景色は変更されたままでクリックのたびに色が変わるという目的の動作が出来ていません。
クリックの度に色を切り替えるというのはどのように考えて作ればよいでしょうか
cssで個別に指定するのかと考えたのですが行の数は可変するので各行にidを付けれずどのようにすればよいか行き詰ってしまいました
初歩的な質問で申し訳ありませんがアドバイス頂きたいです
宜しくお願い致します
html
1 2<table id="test"> 3 <tr> 4 <th>件数</th><th>日付</th><th>入力者</th> 5 </tr> 6 <tr> 7 <td>1</td><td>2019-01-20</td><td>Aさん</td> 8 </tr> 9 <tr> 10 <td>2</td><td>2019-01-21</td><td>Bさん</td> 11 </tr> 12</table>
css
1td { 2 background-color: #FFFF; 3} 4.colorchange { 5 background-color: red; 6}
js
1$( function() { 2 $( '#test tr' ).on( 'click', function() { 3 $( this ).children().not( 'th' ).toggleClass( 'colorchange' ); 4 } ); 5} );
質問追記---------------------------------------------------------
回答頂いた方ありがとうございます。
頂いたコードはjsfiddleで目的の動作を確認致しました。
ただ、自分の実際の開発環境では動作しませんでした。
自分なりに調査した結果、HTMLファイルに直接記入したものは上手く動作して、javascriptで処理の中で作成したものでは動作しませんでした。
このようなケースは稀なのかもしれませんが、当方知識が浅く、どのように調べてよいかもわからず行き詰っています。
自分の作成しているアプリは質問欄の表でいう以下のtbodyにあたる部分をjavascriptで生成しています。
1 | 2019-01-20 | Aさん |
---|---|---|
2 | 2019-01-21 | Bさん |
規模が大きいので全文掲載出来ないのですが、以下がHTMLファイルのテーブルタグの部分
html
1<table id="datatable"class="table is-bordered is-hoverable is-fullwidth"> 2 <thead> 3 <tr class="is-selected" style="background-color: rgb(112, 112, 218)"> 4 <th>件数</th> <th>入力時間</th> 5 </tr> 6 </thead> 7 <tbody id="tablebody"> 8 9 </tbody> 10</table>
以下がjsファイルでコメント記入している部分がHTMLを生成している部分になります
$('#tablebody').append( tr );の部分です
このように作成したHTMLでは所望の動作をしません
選択した箇所の色の変更が適応されるのはHTMLで記載した<thead>内の<tr>だけでした
js
1//table 内容作成 2function dataTable(tabelDate) { 3 if (tabelDate.length > 0) { 4 for (var i = 0; i < tabelDate.length; i++) { 5 var lenCount = i + 1; 6 var doc = tabelDate[i]; 7 var dateObj = [new Date(doc.date)]; 8 var strDate = dateObj.toLocaleString() 9 var sliceStrDate = strDate.slice(0, 18) 10 var tr = `<tr><td> ${lenCount} </td><td> ${sliceStrDate} </td></tr>`; //HTMLタグを生成している部分 11 console.log(tr) 12 $('#tablebody').append( tr ); 13 } 14 } 15 }, 16 error: function () { 17 console.log('error'); 18 } 19 }); 20};
以下のようにjavascriptで生成されるものをあらかじめHTMLファイルに記載しておくとどの行を選択しても色が変わり所望の動作をします
html
1<table id="datatable"class="table is-bordered is-hoverable is-fullwidth"> 2 3<thead> 4 <tr> 5 <th>件数</th> <th>入力時間</th> 6 </tr> 7</thead> 8 9<tbody id="tbody"> 10 <tr onClick="click('Tue Jan 20 2019 09:07:00 GMT+0900 (日本標準時)')"> 11 <td> 1 </td> 12 <td> 2019/1/15 9:07:00 </td> 13 </tr> 14 15 <tr onClick="click('Tue Jan 20 2019 11:31:00 GMT+0900 (日本標準時)')"> 16 <td> 2 </td> 17 <td> 2019/1/15 11:31:00 </td> 18 </tr> 19 20 <tr onClick="click('Tue Jan 20 2019 16:04:03 GMT+0900 (日本標準時)')"> 21 <td> 3 </td> 22 <td> 2019/1/15 16:04:03 </td> 23 </tr> 24 25</tbody> 26</table>
自分で調べて分かったのが上記の部分までで何が原因でどう対処すればよいのか分からず悩んでいます。
説明が分かりにくい部分があるかと思いますがどのような対処法が考えられるかアドバイス頂きたいです。
重ねて質問して申し訳ありませんが宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/21 07:12
2019/01/21 23:41