回答編集履歴

4

配列の範囲外アクセス修正

2021/01/14 08:35

投稿

int32_t
int32_t

スコア21679

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  tdElem.each(function() {
6
6
 
7
- if(!$(this).hasClass('clickedTd'))
7
+ if(!$(this).hasClass('clickedTd') && names.length > 0)
8
8
 
9
9
  $(this).text(names.shift());
10
10
 
@@ -46,7 +46,9 @@
46
46
 
47
47
  tdList.each(function() {
48
48
 
49
+ if (names.length > 0)
50
+
49
- $(this).text(names.shift());
51
+ $(this).text(names.shift());
50
52
 
51
53
  });
52
54
 

3

XSS修正

2021/01/14 08:35

投稿

int32_t
int32_t

スコア21679

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  if(!$(this).hasClass('clickedTd'))
8
8
 
9
- $(this).html(names.shift());
9
+ $(this).text(names.shift());
10
10
 
11
11
  });
12
12
 
@@ -46,7 +46,7 @@
46
46
 
47
47
  tdList.each(function() {
48
48
 
49
- $(this).html(names.shift());
49
+ $(this).text(names.shift());
50
50
 
51
51
  });
52
52
 

2

nits

2021/01/14 08:33

投稿

int32_t
int32_t

スコア21679

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  //テキストエリアの値を配列namesに格納
34
34
 
35
- const names = document.getElementById('nameArea').value.split('\n');
35
+ const names = $('#nameArea').val().split('\n');
36
36
 
37
37
 
38
38
 

1

全体の改善を提案

2021/01/14 08:16

投稿

int32_t
int32_t

スコア21679

test CHANGED
@@ -13,3 +13,45 @@
13
13
  ```
14
14
 
15
15
  で動くのではないでしょうか。
16
+
17
+
18
+
19
+ ----
20
+
21
+ 参考までに、関数`nameSet()`の無駄な処理を削ると以下のようになります。
22
+
23
+ (動作確認していません)
24
+
25
+
26
+
27
+ ```javascript
28
+
29
+ function nameSet(){
30
+
31
+ const tdList = $('table#app-table td:not(.clickedTd)');
32
+
33
+ //テキストエリアの値を配列namesに格納
34
+
35
+ const names = document.getElementById('nameArea').value.split('\n');
36
+
37
+
38
+
39
+ //配列に格納
40
+
41
+ if (names.length > tdList.length) {
42
+
43
+ alert('人数が多すぎます。セルの数を増やしてください。');
44
+
45
+ } else {
46
+
47
+ tdList.each(function() {
48
+
49
+ $(this).html(names.shift());
50
+
51
+ });
52
+
53
+ }
54
+
55
+ }
56
+
57
+ ```