前提・実現したいこと
お世話になります。本日2度目の質問です。
JavaScriptで、テキストエリアに入れた文字列を表テーブルの中にセットしたいです。
その際、表のセルの色がrgb(171,209,198)ならば、そのセルを飛ばして値をセットしたいのですがうまく行きません。
前回の質問で、テーブルのtdタグにclassを指定することで、そのセルを飛ばして値をセットすることができるようになりました。
しかし、テーブル全体のセルの数と、入力するデータ数に差がある場合に思った通りに動いてくれません。(全てのセルに同じ値が入ったり、データが一つ飛ばしで入力されてしまったり)
該当のソースコード
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()">名前セット</button> 12</div>
JavaScript
1//名前格納用配列 2var tableArray = []; 3var allTableArray = []; 4 5//テキストエリアの名前をテーブルにセット 6function nameSet(){ 7 var tdElem = $('table#app-table td'); 8 9 //clickedTdがクラス指定されていないtd要素を配列に取得 10 tdElem.each (function() { 11 allTableArray.push($(this).html()); 12 if($(this).hasClass('clickedTd')){ 13 return true; 14 } 15 tableArray.push($(this).html()); 16 }); 17 18 var tableArrayLength = tableArray.length; 19 var allTableArrayLength = allTableArray.length; 20 21 //テキストエリアの値を配列namesに格納 22 var name = document.getElementById('nameArea').value; 23 var names = name.split('\n'); 24 25 //配列に格納 26 if(names.length > tableArrayLength){ 27 alert('人数が多すぎます。セルの数を増やしてください。'); 28 }else{ 29 for(var i = 0; i < tableArrayLength; i ++){ 30 tableArray[i] = names[i]; 31 } 32 33 //td要素に配列の値を戻す 34 for(var j = 0; j < allTableArrayLength; j++){ 35 if(tdElem.hasClass('clickedTd')){ 36 tdElem.html(""); 37 }else{ 38 tdElem.html(tableArray[j]); 39 } 40 } 41 } 42} 43 44/* 不要セルの判定 */ 45//クリックで色変更。ホバー時の色変更はcssで実行 46//clikedTdクラスを付与することでクリックを判定 47$('table#app-table td').bind('click', function(e) { 48 $(e.currentTarget).css('background-color','rgb(171,209,198)'); 49 $(e.currentTarget).toggleClass("clickedTd"); 50})
試したこと
おそらく、
html
1 //td要素に配列の値を戻す 2 for(var j = 0; j < allTableArrayLength; j++){ 3 if(tdElem.hasClass('clickedTd')){ 4 tdElem.html(""); 5 }else{ 6 tdElem.html(tableArray[j]); 7 } 8 }
この部分の記述がダメで、うまくいっていないのではないかと思っています。
clickedTdクラスがある場合は、tdElemに要素を追加しない
というような動きをさせるにはどのような書き方で実現できるのでしょうか?
each文などを使うのでしょうか...?
最近プログラミングの勉強を始めて、アウトプットとして作成しています。
説明が分かりづらかったら申し訳ございません。
どうかお力をお貸しいただけませんでしょうか。
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/15 02:01