前提・実現したいこと
javascriptを使って、縦型の社員のシフト管理スケジュールを作っています。
わけあって少し独学でHTMLをかじった程度の素人が突然1人で開発することになりとても苦労しています。。。
初めてでコードが汚く、また勉強しながらなので無駄なコードもあるかもしれませんがご容赦ください。
日付を縦1列で表示し、その隣に曜日を表示を表示させたいのですが、曜日の表示がうまくできません。
appendChildがうまくできずエラーになっているみたいなのですがどのようにすればよいかお力添えいただけると助かります。よろしくお願いします。
発生している問題・エラーメッセージ
DOMException: Failed to execute 'appendChild' on 'Node': The new child element contains the parent
DOMException: Failed to execute 'appendChild' on 'Node': The new child element contains the parent
該当のソースコード
html
1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="uft-8"> 6 <title>シフト管理</title> 7</head> 8 9<body> 10 <div id="title"> 11 </div> 12 13 <table border="1" id="calender"> 14 </table> 15 16 <script type="text/javascript"> 17 const now = new Date(); //データ取得 18 var year = now.getFullYear(); //年の取得 19 var month = (now.getMonth() + 1); //月の取得(0〜11月) 20 var today = now.getDate(); //日付の取得 21 console.log("今日:", year, "年", month, "月", today, "日"); 22 23 24 var weekTbl = new Array("日", "月", "火", "水", "木", "金", "土"); //曜日定義 25 var week = weekTbl[now.getDay()]; //漢字で曜日を取得 26 console.log("曜日:", weekTbl[now.getDay()]); 27 28 29 now.setDate(1); //月初の1日をセット 30 var startYear = now.getFullYear() //月初の年取得 31 var startMonth = now.getMonth() + 1 //月初の月取得 32 var startDate = now.getDate() //月初の日付取得 33 var startWeek = weekTbl[now.getDay()] //月初の曜日 34 console.log("月初:", startYear, "年", startMonth, "月", startDate, "日", startWeek, "曜日") 35 36 37 var endMonthly = new Date(now.getFullYear(), now.getMonth() + 1, 0)//月末の計算(0日は1日の1つ前の日付) 38 var endYear = endMonthly.getFullYear() //月末の年取得 39 var endMonth = endMonthly.getMonth() + 1 //月末の月取得 40 var endDate = endMonthly.getDate() //月末の日付取得 41 var endWeek = weekTbl[endMonthly.getDay()] //月末の曜日取得 42 console.log("月末:", endYear, "年", endMonth, "月", endDate, "日", endWeek, "曜日") 43 44 45 46 47 // カレンダーの表示 48 document.getElementById("title").append(year, "年", month, "月"); 49 50 var table = document.getElementById("calender") 51 52 //日付を1つづつ出力 53 for (var n = startDate; n <= endDate; n++) { 54 var i = 0 55 var trAdd = document.createElement("tr") //trを新しく追加 56 var tr = document.getElementsByTagName("tr") //bodyのtrを取得 57 var thAdd = document.createElement("th") //thを新しく追加 58 thAdd.textContent = n //n(日付)をthに記述 59 trAdd.appendChild(thAdd) //trを取得して子要素としてthを追加 60 table.appendChild(trAdd) //tableの最後にtrを追加 61 for (i = 0; i <= n; i++){ 62 var date = document.getElementsByTagName("th") //bodyのth(日付)を取得 63 date[i].appendChild(thAdd) 64 } 65 } 66 67 68 //従業員名を取得し<td>で1つづつ追加するコードを記述する 69 70 </script> 71</body> 72 73</html>
回答1件
あなたの回答
tips
プレビュー