質問編集履歴

2

jsを変更しました

2021/10/03 09:14

投稿

kii.32
kii.32

スコア67

test CHANGED
File without changes
test CHANGED
@@ -44,8 +44,6 @@
44
44
 
45
45
  // カレンダー
46
46
 
47
- window.onload = function () {
48
-
49
47
  // 現在の年月の取得
50
48
 
51
49
  var current = new Date();
@@ -62,23 +60,91 @@
62
60
 
63
61
  add_calendar(wrapper, year, month);
64
62
 
63
+
64
+
65
+
66
+
67
+ function handler(e) {
68
+
69
+ if (e.target.innerText === "") return;
70
+
71
+ const yearmonth = document.querySelector(".calendar-header__title").innerText;
72
+
73
+ document.querySelector("input").value = yearmonth + e.target.innerText + "日";
74
+
65
75
  }
66
76
 
67
-
77
+ /**
78
+
68
-
79
+ * 指定した年月のカレンダーを表示する
80
+
81
+ * @param {object} wrapper - カレンダーを追加する親要素
82
+
83
+ * @param {number} year - 年の指定
84
+
85
+ * @param {number} month - 月の指定
86
+
87
+ */
88
+
69
- function handler(e) {
89
+ function add_calendar(wrapper, year, month) {
90
+
70
-
91
+ // 現在カレンダーが追加されている場合は一旦削除する
92
+
71
- if (e.target.innerText === "") return;
93
+ wrapper.textContent = null;
94
+
95
+
96
+
72
-
97
+ // カレンダーに表示する内容を取得
98
+
73
- const yearmonth = document.querySelector(".calendar-header__title").innerText;
99
+ var headData = generate_calendar_header(wrapper, year, month);
100
+
74
-
101
+ var bodyData = generate_month_calendar(year, month);
102
+
103
+
104
+
105
+ // カレンダーの要素を追加
106
+
107
+ wrapper.appendChild(headData);
108
+
109
+ wrapper.appendChild(bodyData);
110
+
75
- document.querySelector("input").value = yearmonth + e.target.innerText + "日";
111
+ document.querySelectorAll("td").forEach(function (target) {
112
+
113
+ // 引数targetにはdiv要素が1つずつ渡されている
114
+
115
+ target.addEventListener('click', handler);
116
+
117
+ });
118
+
119
+
120
+
121
+ let btnToggleclass = function (el) {
122
+
123
+ el.classList.toggle('classname');
124
+
125
+ }
126
+
127
+
128
+
129
+ btn.addEventListener('click', function () {
130
+
131
+ btnToggleclass(box);
132
+
133
+ }, false);
134
+
135
+
136
+
137
+
76
138
 
77
139
  }
78
140
 
141
+
142
+
143
+
144
+
79
145
  /**
80
146
 
81
- * 指定した年月のカレンダーを表示
147
+ * 指定した年月のカレンダーのヘッダー要素生成して返
82
148
 
83
149
  * @param {object} wrapper - カレンダーを追加する親要素
84
150
 
@@ -88,339 +154,307 @@
88
154
 
89
155
  */
90
156
 
91
- function add_calendar(wrapper, year, month) {
92
-
93
- // 現在カレンダーが追加されている場合は一旦削除する
94
-
95
- wrapper.textContent = null;
96
-
97
-
98
-
99
- // カレンダーに表示する内容を取得
100
-
101
- var headData = generate_calendar_header(wrapper, year, month);
102
-
103
- var bodyData = generate_month_calendar(year, month);
104
-
105
-
106
-
107
- // カレンダーの要素を追加
108
-
109
- wrapper.appendChild(headData);
110
-
111
- wrapper.appendChild(bodyData);
112
-
113
- document.querySelectorAll("td").forEach(function (target) {
114
-
115
- // 引数targetにはdiv要素が1つずつ渡されている
116
-
117
- target.addEventListener('click', handler);
157
+ function generate_calendar_header(wrapper, year, month) {
158
+
159
+ // 前月と翌月を取得
160
+
161
+ var nextMonth = new Date(year, (month - 1));
162
+
163
+ nextMonth.setMonth(nextMonth.getMonth() + 1);
164
+
165
+ var prevMonth = new Date(year, (month - 1));
166
+
167
+ prevMonth.setMonth(prevMonth.getMonth() - 1);
168
+
169
+
170
+
171
+ // ヘッダー要素
172
+
173
+ var cHeader = document.createElement('div');
174
+
175
+ cHeader.className = 'calendar-header';
176
+
177
+
178
+
179
+ // 見出しの追加
180
+
181
+ var cTitle = document.createElement('div');
182
+
183
+ cTitle.className = 'calendar-header__title';
184
+
185
+ var cTitleText = document.createTextNode(year + '年' + month + '月');
186
+
187
+ cTitle.appendChild(cTitleText);
188
+
189
+ cHeader.appendChild(cTitle);
190
+
191
+
192
+
193
+ // 前月ボタンの追加
194
+
195
+ var cPrev = document.createElement('button');
196
+
197
+ cPrev.className = 'calendar-header__prev';
198
+
199
+ var cPrevText = document.createTextNode('prev');
200
+
201
+ cPrev.appendChild(cPrevText);
202
+
203
+ // 前月ボタンをクリックした時のイベント設定
204
+
205
+ cPrev.addEventListener('click', function () {
206
+
207
+ add_calendar(wrapper, prevMonth.getFullYear(), (prevMonth.getMonth() + 1));
208
+
209
+ }, false);
210
+
211
+ cHeader.appendChild(cPrev);
212
+
213
+
214
+
215
+ // 翌月ボタンの追加
216
+
217
+ var cNext = document.createElement('button');
218
+
219
+ cNext.className = 'calendar-header__next';
220
+
221
+ var cNextText = document.createTextNode('next');
222
+
223
+ cNext.appendChild(cNextText);
224
+
225
+ // 翌月ボタンをクリックした時のイベント設定
226
+
227
+ cNext.addEventListener('click', function () {
228
+
229
+ add_calendar(wrapper, nextMonth.getFullYear(), (nextMonth.getMonth() + 1));
230
+
231
+ }, false);
232
+
233
+ cHeader.appendChild(cNext);
234
+
235
+
236
+
237
+ return cHeader;
238
+
239
+ }
240
+
241
+
242
+
243
+ /**
244
+
245
+ * 指定した年月のカレンダー要素を生成して返す
246
+
247
+ * @param {number} year - 年の指定
248
+
249
+ * @param {number} month - 月の指定
250
+
251
+ */
252
+
253
+ function generate_month_calendar(year, month) {
254
+
255
+ var weekdayData = ['日', '月', '火', '水', '木', '金', '土'];
256
+
257
+ // カレンダーの情報を取得
258
+
259
+ var calendarData = get_month_calendar(year, month);
260
+
261
+
262
+
263
+ var i = calendarData[0]['weekday']; // 初日の曜日を取得
264
+
265
+ // カレンダー上の初日より前を埋める
266
+
267
+ while (i > 0) {
268
+
269
+ i--;
270
+
271
+ calendarData.unshift({
272
+
273
+ day: '',
274
+
275
+ weekday: i
276
+
277
+ });
278
+
279
+ }
280
+
281
+ var i = calendarData[calendarData.length - 1]['weekday']; // 末日の曜日を取得
282
+
283
+ // カレンダー上の末日より後を埋める
284
+
285
+ while (i < 6) {
286
+
287
+ i++;
288
+
289
+ calendarData.push({
290
+
291
+ day: '',
292
+
293
+ weekday: i
294
+
295
+ });
296
+
297
+ }
298
+
299
+
300
+
301
+ // カレンダーの要素を生成
302
+
303
+ var cTable = document.createElement('table');
304
+
305
+ cTable.className = 'calendar-table';
306
+
307
+
308
+
309
+ var insertData = '';
310
+
311
+ // 曜日部分の生成
312
+
313
+ insertData += '<thead>';
314
+
315
+ insertData += '<tr>';
316
+
317
+ for (var i = 0; i < weekdayData.length; i++) {
318
+
319
+ insertData += '<th>';
320
+
321
+ insertData += weekdayData[i];
322
+
323
+ insertData += '</th>';
324
+
325
+ }
326
+
327
+ insertData += '</tr>';
328
+
329
+ insertData += '</thead>';
330
+
331
+
332
+
333
+ // 日付部分の生成
334
+
335
+ insertData += '<tbody>';
336
+
337
+ for (var i = 0; i < calendarData.length; i++) {
338
+
339
+ if (calendarData[i]['weekday'] <= 0) {
340
+
341
+ insertData += '<tr>';
342
+
343
+ }
344
+
345
+ insertData += '<td>';
346
+
347
+ insertData += calendarData[i]['day'];
348
+
349
+ insertData += '</td>';
350
+
351
+ if (calendarData[i]['weekday'] >= 6) {
352
+
353
+ insertData += '</tr>';
354
+
355
+ }
356
+
357
+ }
358
+
359
+ insertData += '</tbody>';
360
+
361
+
362
+
363
+ cTable.innerHTML = insertData;
364
+
365
+ return cTable;
366
+
367
+ }
368
+
369
+
370
+
371
+ /**
372
+
373
+ * 指定した年月のカレンダー情報を返す
374
+
375
+ * @param {number} year - 年の指定
376
+
377
+ * @param {number} month - 月の指定
378
+
379
+ */
380
+
381
+ function get_month_calendar(year, month) {
382
+
383
+ var firstDate = new Date(year, (month - 1), 1); // 指定した年月の初日の情報
384
+
385
+ var lastDay = new Date(year, (firstDate.getMonth() + 1), 0).getDate(); // 指定した年月の末日
386
+
387
+ var weekday = firstDate.getDay(); // 指定した年月の初日の曜日
388
+
389
+
390
+
391
+ var calendarData = []; // カレンダーの情報を格納
392
+
393
+ var weekdayCount = weekday; // 曜日のカウント用
394
+
395
+ for (var i = 0; i < lastDay; i++) {
396
+
397
+ calendarData[i] = {
398
+
399
+ day: i + 1,
400
+
401
+ weekday: weekdayCount
402
+
403
+ }
404
+
405
+ // 曜日のカウントが6(土曜日)まできたら0(日曜日)に戻す
406
+
407
+ if (weekdayCount >= 6) {
408
+
409
+ weekdayCount = 0;
410
+
411
+ } else {
412
+
413
+ weekdayCount++;
414
+
415
+ }
416
+
417
+ }
418
+
419
+ return calendarData;
420
+
421
+ }
422
+
423
+
424
+
425
+ // こちらを追加
426
+
427
+ $(function () {
428
+
429
+ $(".calendar-table td").on("click", function () {
430
+
431
+ $(".calendar-table td").removeClass("active");
432
+
433
+ $(this).addClass("active");
118
434
 
119
435
  });
120
436
 
121
-
122
-
123
- let btnToggleclass = function (el) {
124
-
125
- el.classList.toggle('classname');
126
-
127
- }
128
-
129
-
130
-
131
- btn.addEventListener('click', function () {
132
-
133
- btnToggleclass(box);
134
-
135
- }, false);
136
-
137
-
138
-
139
-
140
-
141
- }
142
-
143
-
144
-
145
-
146
-
147
- /**
148
-
149
- * 指定した年月のカレンダーのヘッダー要素を生成して返す
150
-
151
- * @param {object} wrapper - カレンダーを追加する親要素
152
-
153
- * @param {number} year - 年の指定
154
-
155
- * @param {number} month - 月の指定
156
-
157
- */
158
-
159
- function generate_calendar_header(wrapper, year, month) {
160
-
161
- // 前月と翌月を取得
162
-
163
- var nextMonth = new Date(year, (month - 1));
164
-
165
- nextMonth.setMonth(nextMonth.getMonth() + 1);
166
-
167
- var prevMonth = new Date(year, (month - 1));
168
-
169
- prevMonth.setMonth(prevMonth.getMonth() - 1);
170
-
171
-
172
-
173
- // ヘッダー要素
174
-
175
- var cHeader = document.createElement('div');
176
-
177
- cHeader.className = 'calendar-header';
178
-
179
-
180
-
181
- // 見出しの追加
182
-
183
- var cTitle = document.createElement('div');
184
-
185
- cTitle.className = 'calendar-header__title';
186
-
187
- var cTitleText = document.createTextNode(year + '年' + month + '月');
188
-
189
- cTitle.appendChild(cTitleText);
190
-
191
- cHeader.appendChild(cTitle);
192
-
193
-
194
-
195
- // 前月ボタンの追加
196
-
197
- var cPrev = document.createElement('button');
198
-
199
- cPrev.className = 'calendar-header__prev';
200
-
201
- var cPrevText = document.createTextNode('prev');
202
-
203
- cPrev.appendChild(cPrevText);
204
-
205
- // 前月ボタンをクリックした時のイベント設定
206
-
207
- cPrev.addEventListener('click', function () {
208
-
209
- add_calendar(wrapper, prevMonth.getFullYear(), (prevMonth.getMonth() + 1));
210
-
211
- }, false);
212
-
213
- cHeader.appendChild(cPrev);
214
-
215
-
216
-
217
- // 翌月ボタンの追加
218
-
219
- var cNext = document.createElement('button');
220
-
221
- cNext.className = 'calendar-header__next';
222
-
223
- var cNextText = document.createTextNode('next');
224
-
225
- cNext.appendChild(cNextText);
226
-
227
- // 翌月ボタンをクリックした時のイベント設定
228
-
229
- cNext.addEventListener('click', function () {
230
-
231
- add_calendar(wrapper, nextMonth.getFullYear(), (nextMonth.getMonth() + 1));
232
-
233
- }, false);
234
-
235
- cHeader.appendChild(cNext);
236
-
237
-
238
-
239
- return cHeader;
240
-
241
- }
242
-
243
-
244
-
245
- /**
246
-
247
- * 指定した年月のカレンダー要素を生成して返す
248
-
249
- * @param {number} year - 年の指定
250
-
251
- * @param {number} month - 月の指定
252
-
253
- */
254
-
255
- function generate_month_calendar(year, month) {
256
-
257
- var weekdayData = ['日', '月', '火', '水', '木', '金', '土'];
258
-
259
- // カレンダーの情報を取得
260
-
261
- var calendarData = get_month_calendar(year, month);
262
-
263
-
264
-
265
- var i = calendarData[0]['weekday']; // 初日の曜日を取得
266
-
267
- // カレンダー上の初日より前を埋める
268
-
269
- while (i > 0) {
270
-
271
- i--;
272
-
273
- calendarData.unshift({
274
-
275
- day: '',
276
-
277
- weekday: i
278
-
279
- });
280
-
281
- }
282
-
283
- var i = calendarData[calendarData.length - 1]['weekday']; // 末日の曜日を取得
284
-
285
- // カレンダー上の末日より後を埋める
286
-
287
- while (i < 6) {
288
-
289
- i++;
290
-
291
- calendarData.push({
292
-
293
- day: '',
294
-
295
- weekday: i
296
-
297
- });
298
-
299
- }
300
-
301
-
302
-
303
- // カレンダーの要素を生成
304
-
305
- var cTable = document.createElement('table');
306
-
307
- cTable.className = 'calendar-table';
308
-
309
-
310
-
311
- var insertData = '';
312
-
313
- // 曜日部分の生成
314
-
315
- insertData += '<thead>';
316
-
317
- insertData += '<tr>';
318
-
319
- for (var i = 0; i < weekdayData.length; i++) {
320
-
321
- insertData += '<th>';
322
-
323
- insertData += weekdayData[i];
324
-
325
- insertData += '</th>';
326
-
327
- }
328
-
329
- insertData += '</tr>';
330
-
331
- insertData += '</thead>';
332
-
333
-
334
-
335
- // 日付部分の生成
336
-
337
- insertData += '<tbody>';
338
-
339
- for (var i = 0; i < calendarData.length; i++) {
340
-
341
- if (calendarData[i]['weekday'] <= 0) {
342
-
343
- insertData += '<tr>';
344
-
345
- }
346
-
347
- insertData += '<td>';
348
-
349
- insertData += calendarData[i]['day'];
350
-
351
- insertData += '</td>';
352
-
353
- if (calendarData[i]['weekday'] >= 6) {
354
-
355
- insertData += '</tr>';
356
-
357
- }
358
-
359
- }
360
-
361
- insertData += '</tbody>';
362
-
363
-
364
-
365
- cTable.innerHTML = insertData;
366
-
367
- return cTable;
368
-
369
- }
370
-
371
-
372
-
373
- /**
374
-
375
- * 指定した年月のカレンダー情報を返す
376
-
377
- * @param {number} year - 年の指定
378
-
379
- * @param {number} month - 月の指定
380
-
381
- */
382
-
383
- function get_month_calendar(year, month) {
384
-
385
- var firstDate = new Date(year, (month - 1), 1); // 指定した年月の初日の情報
386
-
387
- var lastDay = new Date(year, (firstDate.getMonth() + 1), 0).getDate(); // 指定した年月の末日
388
-
389
- var weekday = firstDate.getDay(); // 指定した年月の初日の曜日
390
-
391
-
392
-
393
- var calendarData = []; // カレンダーの情報を格納
394
-
395
- var weekdayCount = weekday; // 曜日のカウント用
396
-
397
- for (var i = 0; i < lastDay; i++) {
398
-
399
- calendarData[i] = {
400
-
401
- day: i + 1,
402
-
403
- weekday: weekdayCount
404
-
405
- }
406
-
407
- // 曜日のカウントが6(土曜日)まできたら0(日曜日)に戻す
408
-
409
- if (weekdayCount >= 6) {
410
-
411
- weekdayCount = 0;
412
-
413
- } else {
414
-
415
- weekdayCount++;
416
-
417
- }
418
-
419
- }
420
-
421
- return calendarData;
422
-
423
- }
437
+ });
438
+
439
+
440
+
441
+ </script>
442
+
443
+ ```
444
+
445
+
446
+
447
+ ### 試したこと
448
+
449
+
450
+
451
+ 下記を追加してみたのですが、うまくいかず。。
452
+
453
+ 有識者の方がいらっしゃいましたら、ご教授いただけますと幸いです。
454
+
455
+
456
+
457
+ ```ここに言語を入力
424
458
 
425
459
 
426
460
 
@@ -434,38 +468,8 @@
434
468
 
435
469
  });
436
470
 
437
- </script>
471
+
472
+
473
+
438
474
 
439
475
  ```
440
-
441
-
442
-
443
- ### 試したこと
444
-
445
-
446
-
447
- 下記を追加してみたのですが、うまくいかず。。
448
-
449
- 有識者の方がいらっしゃいましたら、ご教授いただけますと幸いです。
450
-
451
-
452
-
453
- ```ここに言語を入力
454
-
455
-
456
-
457
- // こちらを追加
458
-
459
- const btn = document.querySelector('.calendar-table td');
460
-
461
- btn.addEventListener('click', (e) => {
462
-
463
- e.target.classList.toggle('active');
464
-
465
- });
466
-
467
-
468
-
469
-
470
-
471
- ```

1

追加のjavascriptの場所を追記しました

2021/10/03 09:14

投稿

kii.32
kii.32

スコア67

test CHANGED
File without changes
test CHANGED
@@ -422,6 +422,18 @@
422
422
 
423
423
  }
424
424
 
425
+
426
+
427
+ // こちらを追加
428
+
429
+ const btn = document.querySelector('.calendar-table td');
430
+
431
+ btn.addEventListener('click', (e) => {
432
+
433
+ e.target.classList.toggle('active');
434
+
435
+ });
436
+
425
437
  </script>
426
438
 
427
439
  ```
@@ -440,6 +452,10 @@
440
452
 
441
453
  ```ここに言語を入力
442
454
 
455
+
456
+
457
+ // こちらを追加
458
+
443
459
  const btn = document.querySelector('.calendar-table td');
444
460
 
445
461
  btn.addEventListener('click', (e) => {
@@ -448,4 +464,8 @@
448
464
 
449
465
  });
450
466
 
467
+
468
+
469
+
470
+
451
471
  ```