回答編集履歴
3
テキスト追加
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
追記
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
追記
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
|
|