回答編集履歴

5

説明文に3ファイルとも修正した旨記載を追加

2020/10/10 03:40

投稿

nekora
nekora

スコア501

test CHANGED
@@ -32,6 +32,8 @@
32
32
 
33
33
  ### 以下が修正した、完全動作版のソースコードです。
34
34
 
35
+ **3つのファイル全てに手を入れてるので全てお持ちのコードと差し替えてください。**
36
+
35
37
 
36
38
 
37
39
  ```html

4

CSSの更新

2020/10/10 03:40

投稿

nekora
nekora

スコア501

test CHANGED
@@ -524,165 +524,171 @@
524
524
 
525
525
  body {
526
526
 
527
- margin: 0;
528
-
529
- }
530
-
531
-
532
-
533
- .container {
534
-
535
- display: flex;
536
-
537
- justify-content: center;
538
-
539
- }
540
-
541
-
542
-
543
- .table1 {
544
-
545
- width: 80%;
546
-
547
- }
548
-
549
-
550
-
551
- .thisMonth {
552
-
553
- text-align: center;
554
-
555
- margin: 40px auto;
556
-
557
- }
558
-
559
-
560
-
561
- .sat {
562
-
563
- background-color: skyblue;
564
-
565
- }
566
-
567
-
568
-
569
- .sun {
570
-
571
- background-color: tomato;
572
-
573
- }
574
-
575
-
576
-
577
- #prev,
578
-
579
- #next {
580
-
581
- display: block;
582
-
583
- margin: auto;
584
-
585
- padding: 10px; /* 押しづらいのでpaddingで押せる領域を広げてやる */
586
-
587
- border: 1px solid black;
588
-
589
- cursor: pointer;
590
-
591
- }
592
-
593
-
594
-
595
- /* 押せる範囲に入ったら背景色を変えて教えてやると使い勝手が上がる */
596
-
597
- #prev:hover,
598
-
599
- #next:hover {
600
-
601
- background-color: yellow;
602
-
603
- }
604
-
605
-
606
-
607
- .heading {
608
-
609
- display: flex;
610
-
611
- }
612
-
613
-
614
-
615
- .header {
616
-
617
- font-weight: bold;
618
-
619
- }
620
-
621
-
622
-
623
- .btn {
624
-
625
- margin-left: 150px;
626
-
627
- margin-bottom: 20px;
628
-
629
- }
630
-
631
-
632
-
633
- table,
634
-
635
- th,
636
-
637
- tr,
638
-
639
- td {
640
-
641
- border-collapse: collapse;
642
-
643
- border: 2px solid #333;
644
-
645
- }
646
-
647
-
648
-
649
- td {
650
-
651
- width: 53px;
652
-
653
- height: 28px;
527
+ margin: 0;
528
+
529
+ }
530
+
531
+
532
+
533
+ .container {
534
+
535
+ display: flex;
536
+
537
+ justify-content: center;
538
+
539
+ }
540
+
541
+
542
+
543
+ .table1 {
544
+
545
+ width: 80%;
546
+
547
+ }
548
+
549
+
550
+
551
+ .thisMonth {
654
552
 
655
553
  text-align: center;
656
554
 
657
- }
658
-
659
-
660
-
661
- #run {
662
-
663
- cursor: pointer;
664
-
665
- }
666
-
667
-
668
-
669
- #run:hover {
670
-
671
- opacity: 0.5;
672
-
673
- }
674
-
675
-
676
-
677
- tbody tr td {
678
-
679
- cursor: pointer;
680
-
681
- user-select: none;
682
-
683
- }
684
-
685
-
555
+ margin: 40px auto;
556
+
557
+ }
558
+
559
+
560
+
561
+ .sat {
562
+
563
+ background-color: skyblue;
564
+
565
+ }
566
+
567
+
568
+
569
+ .sun {
570
+
571
+ background-color: tomato;
572
+
573
+ }
574
+
575
+
576
+
577
+ #prev,
578
+
579
+ #next {
580
+
581
+ display: block;
582
+
583
+ margin: auto;
584
+
585
+ padding: 10px; /* 押しづらいのでpaddingで押せる領域を広げてやる */
586
+
587
+ border: 1px solid black;
588
+
589
+ cursor: pointer;
590
+
591
+ }
592
+
593
+
594
+
595
+ /* 押せる範囲に入ったら背景色を変えて教えてやると使い勝手が上がる */
596
+
597
+ #prev:hover,
598
+
599
+ #next:hover {
600
+
601
+ background-color: yellow;
602
+
603
+ }
604
+
605
+
606
+
607
+ .heading {
608
+
609
+ display: flex;
610
+
611
+ }
612
+
613
+
614
+
615
+ .header {
616
+
617
+ font-weight: bold;
618
+
619
+ }
620
+
621
+
622
+
623
+ .btn {
624
+
625
+ margin-left: 150px;
626
+
627
+ margin-bottom: 20px;
628
+
629
+ }
630
+
631
+
632
+
633
+ table,
634
+
635
+ th,
636
+
637
+ tr,
638
+
639
+ td {
640
+
641
+ border-collapse: collapse;
642
+
643
+ border: 2px solid #333;
644
+
645
+ }
646
+
647
+
648
+
649
+ td {
650
+
651
+ width: 53px;
652
+
653
+ height: 28px;
654
+
655
+ text-align: center;
656
+
657
+ }
658
+
659
+
660
+
661
+ td:not([id^="phValue"]):hover { /* 要素を選択ホバーしていることを明示して日付の押し間違いを防ぐ */
662
+
663
+ background-color: yellow;
664
+
665
+ }
666
+
667
+
668
+
669
+ #run {
670
+
671
+ cursor: pointer;
672
+
673
+ }
674
+
675
+
676
+
677
+ #run:hover {
678
+
679
+ opacity: 0.5;
680
+
681
+ }
682
+
683
+
684
+
685
+ tbody tr td {
686
+
687
+ cursor: pointer;
688
+
689
+ user-select: none;
690
+
691
+ }
686
692
 
687
693
  ```
688
694
 

3

説明の追記

2020/10/10 00:06

投稿

nekora
nekora

スコア501

test CHANGED
@@ -689,3 +689,9 @@
689
689
 
690
690
 
691
691
  以上です。動作確認済みですが、問題があればコメントをつけて下さい。出来る限り対応します。
692
+
693
+
694
+
695
+ **コードブロックは右上のアイコンをクリックすれば全コピー出来ます。
696
+
697
+ コピーして利用してください。**

2

CSSが開示されたので動作する物が完成したので記述差し替え

2020/10/09 12:12

投稿

nekora
nekora

スコア501

test CHANGED
@@ -1,8 +1,10 @@
1
- ### CSSが提示されていないため、正しく動いているのか判断に迷います。CSSを提示ください
1
+ ~~### CSSが提示されていないため、正しく動いているのか判断に迷います。CSSを提示ください~~
2
+
2
-
3
+ ### CSSが開示されたので動作確認をし、不具合やUIの利便性などを修正してあります。
3
-
4
-
4
+
5
+
6
+
5
- kuma_kuma様が修正されたスクリプトを使用しています。
7
+ kuma_kuma様が修正された**スクリプトを加筆修正**して使用しています。
6
8
 
7
9
 
8
10
 
@@ -12,15 +14,23 @@
12
14
 
13
15
  あとkuma_kumaさまが```init()```関数を定義してくださっているので、ページのロードのタイミングで実行するようにしてあります。
14
16
 
17
+  **追記:なので用途不明なRUNボタンはコメントアウトしています。**
18
+
19
+
20
+
15
- 結果、カレンダーは正常に前・後ろに移動しても正しいカレンダーに更新されるようになりましたが
21
+ 結果、カレンダーは正常に前・後ろに移動しても正しいカレンダーに更新されるようになりました~~繰り返しますがCSSを提示ください。本当に正しいのかどうか判断できません。~~
16
-
17
- 繰り返しますがCSSを提示ください。本当に正しいのかどうか判断できません。
22
+
18
-
19
-
20
-
23
+
24
+
21
- とりあえず修正したHTMLとkuma_kuma様が修正してくださったスクリプトを載せておきます。
25
+ ~~とりあえず修正したHTMLとkuma_kuma様が修正してくださったスクリプトを載せておきます。~~
22
-
26
+
23
- CSSが開示されたら、再度動作確認をして必要なら修正します。
27
+ ~~CSSが開示されたら、再度動作確認をして必要なら修正します。~~
28
+
29
+
30
+
31
+ ### CSSが開示されたので動作確認をし、不具合やUIの利便性などを修正してあります。
32
+
33
+ ### 以下が修正した、完全動作版のソースコードです。
24
34
 
25
35
 
26
36
 
@@ -54,7 +64,7 @@
54
64
 
55
65
  </div>
56
66
 
57
- <button id="run" class="btn">RUN</button>
67
+ <!--<button id="run" class="btn">RUN</button> onloadでinit()を呼んでいるので用途不明なrunボタンは不要。コメントアウト-->
58
68
 
59
69
  <div class="container" id="_container">
60
70
 
@@ -204,8 +214,6 @@
204
214
 
205
215
  </html>
206
216
 
207
-
208
-
209
217
  ```
210
218
 
211
219
 
@@ -224,252 +232,460 @@
224
232
 
225
233
  function clearCalender() { //前のカレンダーを削除
226
234
 
227
- /* 削除
228
-
229
- const table = document.querySelector('.table1');
230
-
231
- while (table.firstChild) {
232
-
233
- table.removeChild(table.firstChild);
235
+ //と共に<td>追加前に存在していた要素を追加復元
236
+
237
+ document.getElementById("calender").innerHTML = '';
238
+
239
+ document.getElementById("calender").innerHTML ='<th rowspan="2">root</th><th rowspan="2">name</th>';
240
+
241
+
242
+
243
+ document.getElementById("week").innerHTML = '';
244
+
245
+
246
+
247
+ document.getElementById("tbody1").innerHTML = '';
248
+
249
+ document.getElementById("tbody1").innerHTML = '<tr id="row0"><th>2009</th><th>yu-ki</th></tr><tr id="row1"><th>2010</th><th>aya</th></tr><tr id="row2"><th>2011</th><th>rino</th></tr><tr id="row3"><th>2012</th><th>den</th></tr><tr id="row4"><th>2014</th><th>petie</th></tr><tr id="row5"><th>STR</th><th>tanaka</th></tr><tr id="row6"><th>STR</th><th>yoshida</th></tr>';
250
+
251
+ }
252
+
253
+
254
+
255
+ function renderTitle() {//年月を表示
256
+
257
+ const title = document.getElementById('title');
258
+
259
+ title.textContent = `${year}/${String(month + 1).padStart(2, '0')}`;
260
+
261
+ }
262
+
263
+
264
+
265
+ function getCalender() { //日数分のセルを生成しtextContentで日付を入れる
266
+
267
+ const lastDate = new Date(year, month + 1, 0).getDate();
268
+
269
+ for (let i = 1; i <= lastDate; i++) {
270
+
271
+ const tdDate = document.createElement('td');
272
+
273
+ tdDate.textContent = i;
274
+
275
+ document.getElementById('calender').appendChild(tdDate);
276
+
277
+ if (new Date(year, month, i).getDay() === 6) {
278
+
279
+ tdDate.classList.add('sat');
280
+
281
+ }
282
+
283
+ if (new Date(year, month, i).getDay() === 0) {
284
+
285
+ tdDate.classList.add('sun');
286
+
287
+ }
234
288
 
235
289
  }
236
290
 
237
- */
238
-
239
- document.getElementById("calender").innerHTML = '';
240
-
241
- document.getElementById("week").innerHTML = '';
242
-
243
- document.getElementById("tbody1").innerHTML = '';
244
-
245
- }
291
+ }
246
-
247
-
248
-
292
+
293
+
294
+
249
- function renderTitle() {//月を表示
295
+ function getWeek() {//の曜日取得しセルを生成
250
-
251
- const title = document.getElementById('title');
252
-
253
- title.textContent = `${year}/${String(month + 1).padStart(2, '0')}`;
254
-
255
- }
256
-
257
-
258
-
259
- function getCalender() { //日数分のセルを生成しtextContentで日付を入れる
260
296
 
261
297
  const lastDate = new Date(year, month + 1, 0).getDate();
262
298
 
263
- for (let i = 1; i <= lastDate; i++) {
299
+ for (let n = 1; n <= lastDate; n++) {
264
-
300
+
265
- const tdDate = document.createElement('td');
301
+ const tdDay = document.createElement('td');
302
+
266
-
303
+ let wObj = ["日", "月", "火", "水", "木", "金", "土"][new Date(year, month, n).getDay()];//指定した日付の曜日を文字列で取得
304
+
267
- tdDate.textContent = i;
305
+ tdDay.textContent = wObj;
268
-
306
+
269
- document.getElementById('calender').appendChild(tdDate);
307
+ document.getElementById('week').appendChild(tdDay);
270
-
308
+
271
- if (new Date(year, month, i).getDay() === 6) {
309
+ if (tdDay.textContent==="土") {
272
-
310
+
273
- tdDate.classList.add('sat');
311
+ tdDay.classList.add('sat');
312
+
313
+ }
314
+
315
+ if (tdDay.textContent==="日") {
316
+
317
+ tdDay.classList.add('sun');
274
318
 
275
319
  }
276
320
 
321
+ }
322
+
323
+ }
324
+
325
+
326
+
327
+ function addCell(id) {//シフト用のセルを生成
328
+
277
- if (new Date(year, month, i).getDay() === 0) {
329
+ const lastDate = new Date(year, month + 1, 0).getDate();
330
+
278
-
331
+ for (let n = 1; n <= lastDate; n++) {
332
+
333
+ const td = document.createElement('td');
334
+
279
- tdDate.classList.add('sun');
335
+ td.textContent = '○';
336
+
337
+ document.getElementById(id).appendChild(td);
338
+
339
+ td.addEventListener('click', () => {
340
+
341
+ if (td.textContent==='○') {
342
+
343
+ td.textContent = '休';
344
+
345
+ } else if (td.textContent==='休') {
346
+
347
+ td.textContent = '○';
348
+
349
+ }
350
+
351
+ });
352
+
353
+ }
354
+
355
+ }
356
+
357
+
358
+
359
+ function ph(rowId, phId) {//個人の休みをカウントする
360
+
361
+ const row = document.getElementById(rowId);
362
+
363
+ const td = row.querySelectorAll('td');
364
+
365
+ const phValue = document.getElementById(phId);
366
+
367
+ let phCount = 0;
368
+
369
+ // console.log(td);
370
+
371
+ td.forEach(function(item){
372
+
373
+ item.addEventListener('click', () => { //tdはquerySelectorAllで複数個になっててforEachで要素1こをitemとして
374
+
375
+ if (item.textContent==='○') { //もらっているのでif文はitem.textContentを見ないといけない
376
+
377
+ phCount--;
378
+
379
+ phValue.textContent = phCount;
380
+
381
+ } else if (item.textContent==='休') {
382
+
383
+ phCount++;
384
+
385
+ phValue.textContent = phCount;
386
+
387
+ };
388
+
389
+ });
390
+
391
+ });
392
+
393
+ }
394
+
395
+
396
+
397
+ function resetPh() { // これが無いと月が替わったとき休みの数がどこかクリックするまで、前の値で残るバグがでる
398
+
399
+ let phValue = document.getElementById('phValue0');
400
+
401
+ phValue.textContent = 0;
402
+
403
+ phValue = document.getElementById('phValue1');
404
+
405
+ phValue.textContent = 0;
406
+
407
+ phValue = document.getElementById('phValue2');
408
+
409
+ phValue.textContent = 0;
410
+
411
+ phValue = document.getElementById('phValue3');
412
+
413
+ phValue.textContent = 0;
414
+
415
+ phValue = document.getElementById('phValue4');
416
+
417
+ phValue.textContent = 0;
418
+
419
+ phValue = document.getElementById('phValue5');
420
+
421
+ phValue.textContent = 0;
422
+
423
+ phValue = document.getElementById('phValue6');
424
+
425
+ phValue.textContent = 0;
426
+
427
+ }
428
+
429
+
430
+
431
+ function bundling() {
432
+
433
+ clearCalender();
434
+
435
+ renderTitle();
436
+
437
+ getCalender();
438
+
439
+ getWeek();
440
+
441
+ addCell('row0');
442
+
443
+ addCell('row1');
444
+
445
+ addCell('row2');
446
+
447
+ addCell('row3');
448
+
449
+ addCell('row4');
450
+
451
+ addCell('row5');
452
+
453
+ addCell('row6');
454
+
455
+ resetPh();
456
+
457
+ ph('row0', 'phValue0');
458
+
459
+ ph('row1', 'phValue1');
460
+
461
+ ph('row2', 'phValue2');
462
+
463
+ ph('row3', 'phValue3');
464
+
465
+ ph('row4', 'phValue4');
466
+
467
+ ph('row5', 'phValue5');
468
+
469
+ ph('row6', 'phValue6');
470
+
471
+ }
472
+
473
+
474
+
475
+
476
+
477
+ function init(){
478
+
479
+ document.getElementById('prev').addEventListener('click', () => {
480
+
481
+ month--;
482
+
483
+ if (month < 0) {
484
+
485
+ year--;
486
+
487
+ month = 11;
280
488
 
281
489
  }
282
490
 
491
+ bundling();
492
+
283
- }
493
+ });
284
-
285
- }
494
+
286
-
287
-
288
-
289
- function getWeek() {//当月の曜日を取得しセルを生成
495
+
290
-
291
- const lastDate = new Date(year, month + 1, 0).getDate();
496
+
292
-
293
- for (let n = 1; n <= lastDate; n++) {
294
-
295
- const tdDay = document.createElement('td');
296
-
297
- let wObj = ["日", "月", "火", "水", "木", "金", "土"][new Date(year, month, n).getDay()];//指定した日付の曜日を文字列で取得
298
-
299
- tdDay.textContent = wObj;
300
-
301
- document.getElementById('week').appendChild(tdDay);
497
+ document.getElementById('next').addEventListener('click', () => {
498
+
302
-
499
+ month++;
500
+
303
- if (tdDay.textContent==="土") {
501
+ if (month > 11) {
304
-
502
+
305
- tdDay.classList.add('sat');
503
+ year++;
306
-
307
- }
504
+
308
-
309
- if (tdDay.textContent==="日") {
505
+ month = 0;
310
-
311
- tdDay.classList.add('sun');
312
506
 
313
507
  }
314
508
 
315
- }
316
-
317
- }
318
-
319
-
320
-
321
- function addCell(id) {//シフト用のセルを生成
322
-
323
- const lastDate = new Date(year, month + 1, 0).getDate();
324
-
325
- for (let n = 1; n <= lastDate; n++) {
326
-
327
- const td = document.createElement('td');
328
-
329
- td.textContent = '○';
330
-
331
- document.getElementById(id).appendChild(td);
332
-
333
- td.addEventListener('click', () => {
334
-
335
- if (td.textContent==='○') {
336
-
337
- td.textContent = '休';
338
-
339
- } else if (td.textContent==='休') {
340
-
341
- td.textContent = '○';
342
-
343
- }
344
-
345
- });
346
-
347
- }
348
-
349
- }
350
-
351
-
352
-
353
- function ph(rowId, phId) {//個人の休みをカウントする
354
-
355
- const row = document.getElementById(rowId);
356
-
357
- const td = row.querySelectorAll('td');
358
-
359
- const phValue = document.getElementById(phId);
360
-
361
- let phCount = 0;
362
-
363
- // console.log(td);
364
-
365
- td.forEach(function(item){
366
-
367
- item.addEventListener('click', () => {
368
-
369
- if (td.textContent==='○') {
370
-
371
- phCount--;
509
+ bundling();
372
-
373
- phValue.textContent = phCount;
374
-
375
- } else if (td.textContent==='休') {
376
-
377
- phCount++;
378
-
379
- phValue.textContent = phCount;
380
-
381
- };
382
-
383
- });
384
510
 
385
511
  });
386
512
 
387
- }
388
-
389
-
390
-
391
- function bundling() {
392
-
393
- clearCalender();
394
-
395
- renderTitle();
396
-
397
- getCalender();
398
-
399
- getWeek();
400
-
401
- addCell('row0');
402
-
403
- addCell('row1');
404
-
405
- addCell('row2');
406
-
407
- addCell('row3');
408
-
409
- addCell('row4');
410
-
411
- addCell('row5');
412
-
413
- addCell('row6');
414
-
415
- ph('row0', 'phValue0');
416
-
417
- ph('row1', 'phValue1');
418
-
419
- ph('row2', 'phValue2');
420
-
421
- ph('row3', 'phValue3');
422
-
423
- ph('row4', 'phValue4');
424
-
425
- ph('row5', 'phValue5');
426
-
427
- ph('row6', 'phValue6');
428
-
429
- }
430
-
431
-
432
-
433
-
434
-
435
- function init(){
436
-
437
- document.getElementById('prev').addEventListener('click', () => {
438
-
439
- month--;
440
-
441
- if (month < 0) {
442
-
443
- year--;
444
-
445
- month = 11;
446
-
447
- }
448
-
449
- bundling();
450
-
451
- });
452
-
453
-
454
-
455
- document.getElementById('next').addEventListener('click', () => {
456
-
457
- month++;
458
-
459
- if (month > 11) {
460
-
461
- year++;
462
-
463
- month = 0;
464
-
465
- }
466
-
467
- bundling();
468
-
469
- });
470
-
471
513
  bundling();
472
514
 
473
515
  }
474
516
 
475
517
  ```
518
+
519
+
520
+
521
+ css/styles.css
522
+
523
+ ```css
524
+
525
+ body {
526
+
527
+ margin: 0;
528
+
529
+ }
530
+
531
+
532
+
533
+ .container {
534
+
535
+ display: flex;
536
+
537
+ justify-content: center;
538
+
539
+ }
540
+
541
+
542
+
543
+ .table1 {
544
+
545
+ width: 80%;
546
+
547
+ }
548
+
549
+
550
+
551
+ .thisMonth {
552
+
553
+ text-align: center;
554
+
555
+ margin: 40px auto;
556
+
557
+ }
558
+
559
+
560
+
561
+ .sat {
562
+
563
+ background-color: skyblue;
564
+
565
+ }
566
+
567
+
568
+
569
+ .sun {
570
+
571
+ background-color: tomato;
572
+
573
+ }
574
+
575
+
576
+
577
+ #prev,
578
+
579
+ #next {
580
+
581
+ display: block;
582
+
583
+ margin: auto;
584
+
585
+ padding: 10px; /* 押しづらいのでpaddingで押せる領域を広げてやる */
586
+
587
+ border: 1px solid black;
588
+
589
+ cursor: pointer;
590
+
591
+ }
592
+
593
+
594
+
595
+ /* 押せる範囲に入ったら背景色を変えて教えてやると使い勝手が上がる */
596
+
597
+ #prev:hover,
598
+
599
+ #next:hover {
600
+
601
+ background-color: yellow;
602
+
603
+ }
604
+
605
+
606
+
607
+ .heading {
608
+
609
+ display: flex;
610
+
611
+ }
612
+
613
+
614
+
615
+ .header {
616
+
617
+ font-weight: bold;
618
+
619
+ }
620
+
621
+
622
+
623
+ .btn {
624
+
625
+ margin-left: 150px;
626
+
627
+ margin-bottom: 20px;
628
+
629
+ }
630
+
631
+
632
+
633
+ table,
634
+
635
+ th,
636
+
637
+ tr,
638
+
639
+ td {
640
+
641
+ border-collapse: collapse;
642
+
643
+ border: 2px solid #333;
644
+
645
+ }
646
+
647
+
648
+
649
+ td {
650
+
651
+ width: 53px;
652
+
653
+ height: 28px;
654
+
655
+ text-align: center;
656
+
657
+ }
658
+
659
+
660
+
661
+ #run {
662
+
663
+ cursor: pointer;
664
+
665
+ }
666
+
667
+
668
+
669
+ #run:hover {
670
+
671
+ opacity: 0.5;
672
+
673
+ }
674
+
675
+
676
+
677
+ tbody tr td {
678
+
679
+ cursor: pointer;
680
+
681
+ user-select: none;
682
+
683
+ }
684
+
685
+
686
+
687
+ ```
688
+
689
+
690
+
691
+ 以上です。動作確認済みですが、問題があればコメントをつけて下さい。出来る限り対応します。

1

タイプミスの修正

2020/10/09 11:54

投稿

nekora
nekora

スコア501

test CHANGED
@@ -210,7 +210,7 @@
210
210
 
211
211
 
212
212
 
213
- js/main,js
213
+ js/main.js
214
214
 
215
215
  ```javascript
216
216