回答編集履歴

3

テキスト追加

2022/09/05 12:29

投稿

退会済みユーザー
test CHANGED
@@ -73,7 +73,7 @@
73
73
 
74
74
  ### 追記(2)
75
75
 
76
- **追記(1)** に書いたようにフィルタ条件部分を `<form>・・・</form>` で囲むと、javascriptのほうをさらに詰めることができ、以下で意図した動作になると思います。
76
+ **追記(1)** に書いたようにHTMLのフィルタ条件部分(二つの`<ul>・・・</ul>`) を `<form>・・・</form>` で囲むと、javascriptのほうをさらに詰めることができ、以下で意図した動作になると思います。
77
77
  ```javascript
78
78
  window.addEventListener('DOMContentLoaded', function(){
79
79
 

2

追記

2022/09/05 12:25

投稿

退会済みユーザー
test CHANGED
@@ -37,7 +37,7 @@
37
37
 
38
38
  ```
39
39
 
40
- ### 追記
40
+ ### 追記(1)
41
41
 
42
42
  上記で回答したコードのHTMLを少し修正すると、JSの一部がより簡単にできます。
43
43
 
@@ -71,4 +71,22 @@
71
71
  + const [whoValue, whatValue] = [...new FormData(document.forms[0]).values()];
72
72
  ```
73
73
 
74
+ ### 追記(2)
74
75
 
76
+ **追記(1)** に書いたようにフィルタ条件部分を `<form>・・・</form>` で囲むと、javascriptのほうをさらに詰めることができ、以下で意図した動作になると思います。
77
+ ```javascript
78
+ window.addEventListener('DOMContentLoaded', function(){
79
+
80
+ document.forms[0].addEventListener('change', () => {
81
+ document.querySelectorAll('.target').forEach(item => {
82
+ const categories = item.dataset.category.split(' ');
83
+ const isDisplayed = ['who', 'what'].every(
84
+ (name, i) => ['All', categories[i]].includes(document.forms[0][name].value)
85
+ );
86
+ item.style.display = isDisplayed ? 'list-item' : 'none';
87
+ })
88
+ });
89
+
90
+ });
91
+
92
+ ```

1

追記

2022/09/05 10:33

投稿

退会済みユーザー
test CHANGED
@@ -37,5 +37,38 @@
37
37
 
38
38
  ```
39
39
 
40
+ ### 追記
41
+
42
+ 上記で回答したコードのHTMLを少し修正すると、JSの一部がより簡単にできます。
43
+
44
+ まず HTML のほうのフィルター条件部分の2つの `<ul>` を `<form>・・・</form>`で囲みます。
45
+ ```diff
46
+ + <form>
47
+ <ul>
48
+ <li><input type="radio" id="who-All" name="who" value="All" checked>
49
+ <label for="who-All">All</label></li>
50
+ <li><input type="radio" id="CharaA" name="who" value="CharaA">
51
+ <label for="CharaA">Aさん</label></li>
52
+ <li><input type="radio" id="CharaB" name="who" value="CharaB">
53
+ <label for="CharaB">Bさん</label></li>
54
+ </ul>
55
+ <ul>
56
+ <li><input type="radio" id="what-All" name="what" value="All" checked>
57
+ <label for="what-All">All</label></li>
58
+ <li><input type="radio" id="Wark" name="what" value="Wark">
59
+ <label for="Wark">歩く</label></li>
60
+ <li><input type="radio" id="Song" name="what" value="Song">
61
+ <label for="Song">歌う</label></li>
62
+ </ul>
63
+ + </form>
64
+ ```
65
+
66
+ そうすると、JSのほうでフィルター条件の値となる `whoValue` と `whatValue` を得るところが少し簡単にできます。
67
+
68
+ ```diff
69
+ - const [whoValue, whatValue] =
70
+ - [...document.querySelectorAll('input[type=radio]:checked')].map(e => e.value);
71
+ + const [whoValue, whatValue] = [...new FormData(document.forms[0]).values()];
72
+ ```
40
73
 
41
74