前提・実現したいこと
お世話になります。初めて質問させていただきます。
JavaScriptで、テキストエリアに入れた文字を表テーブルの中にセットしたいです。
その際、表のセルの色がrgb(171,209,198)ならば、そのセルを飛ばして値をセットしたいのですがうまく行きません。
該当のソースコード
html
1<table id="app-table"> 2 <tr> 3 <td></td> 4 <td></td> 5 <td></td> 6 </tr> 7</table> 8 9<div> 10 <textarea id="nameArea"></textarea> 11 <button onclick="nameSet()" class="btn btn-outline-secondary btn-lg">名前セット</button> 12</div>
css
1#app-table tr td:hover { 2 background-color: rgb(171, 209, 198); 3}
JavaScript
1//名前格納用配列 2var tableArray = []; 3 4/* テキストエリアの名前を表にセット */ 5function nameSet(){ 6 var tdElem = $('table#app-table td'); 7 /* td要素を配列に取得 */ 8 tdElem.each (function() { 9 tableArray.push($(this).html()); 10 }); 11 //テキストエリアの値を配列namesに格納 12 var name = document.getElementById('nameArea').value; 13 var names = name.split('\n'); 14 var n = tableArray.length; 15 if(names.length > tableArray.length){ 16 alert('テキストエリアに入力した人数がセル数を上回っています。'); 17 }else{ 18 for(var i = 0; i < n; i ++){ 19 tableArray[i] = names[i]; 20 } 21 /* td要素に配列の値を戻す */ 22 tdElem.each (function(i) { 23 if($(this).css('background-color') == 'rgb(171,209,198)'){ 24 continue; 25 } 26 $(this).html(tableArray[i]); 27 i++; 28 }); 29 } 30} 31 32//クリックで色変更。ホバー時の色変更はcssで実行 33$('table#app-table td').bind('click', function(e) { 34 $(e.currentTarget).css('background-color','rgb(171,209,198)'); 35})
試したこと
まず、表のセルの色を変更するのに、
JavaScript
1//クリックで色変更。ホバー時の色変更はcssで実行 2$('table#app-table td').bind('click', function(e) { 3 $(e.currentTarget).css('background-color','rgb(171,209,198)'); 4})
というコードを用意しました。
その後、値をセットするのですが、
JavaScript
1 /* td要素に配列の値を戻す */ 2 tdElem.each (function(i) { 3 if($(this).css('background-color') == 'rgb(171,209,198)'){ 4 continue; 5 } 6 $(this).html(tableArray[i]); 7 i++; 8 });
このコードの、
JavaScript
1 if($(this).css('background-color') == 'rgb(171,209,198)'){ 2 continue; 3 }
を記述したところ、クリックしても背景色が変わらなくなってしまいました。
nameSet()のなかに入れたコードが他のコードにも影響するのはなぜでしょうか...?
最近プログラミングの勉強を始めて、アウトプットとして作成しています。
説明が分かりづらかったら申し訳ございません。
どうかお力をお貸しいただけませんでしょうか。
どうぞよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー