回答編集履歴

1

コードに解説を追加

2018/03/24 12:38

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -22,19 +22,49 @@
22
22
 
23
23
  ```JavaScript
24
24
 
25
+ //スクリプトをストリクトモードで実行(変数の宣言忘れなどを防止できる)
26
+
25
27
  "use strict";
26
28
 
29
+ //ブロックスコープで囲い, 変数を局所化する
30
+
27
31
  {
32
+
33
+ //都度テーブルを読み込むのは処理速度的に不利なため,
34
+
35
+ //予め必要となる要素(行とセル)をリストアップしておく
36
+
37
+ //NOTE:demo.querySelectorAllメソッドはHTMLCollectionを返す
38
+
39
+ //これはArrayに似て非なるもので使い勝手が悪い.
40
+
41
+ //そのため, [].slice.callを被せて本物のArrayに変換している.
28
42
 
29
43
  const rows = [].slice.call(demo.querySelectorAll("tbody tr"));
30
44
 
31
45
  const cells = [].slice.call(demo.querySelectorAll("tbody td"));
32
46
 
47
+ //ボタンクリック時に呼び出される関数はブロックスコープ外に公開する必要があるため,
48
+
49
+ //varで宣言する.
50
+
33
- var searchTable = e => {
51
+ var searchTable = e => {//アロー関数
52
+
53
+ //検索条件を入手する
34
54
 
35
55
  const cond = search.value;
36
56
 
57
+ //まず, 前回の検索結果を削除
58
+
37
59
  rows.forEach(row => row.classList.remove("selected"));
60
+
61
+ //セル毎に中身の文字列が検索条件を含んでいるかを判定し,
62
+
63
+ //含んでいたらそのセルから見て一番近いtr要素にselectedクラスを付与
64
+
65
+ //含んでいなかったらなにもしない(null)
66
+
67
+ //NOTE:三項演算子はif文で書いても同じです.
38
68
 
39
69
  cells.forEach(cell =>
40
70