回答編集履歴
3
chousei
test
CHANGED
@@ -60,20 +60,21 @@
|
|
60
60
|
<li class="list_item" data-university='["tokyo","kyoto","osaka"]'>東京,京都,大阪</li>
|
61
61
|
</ul>
|
62
62
|
```
|
63
|
+
# 3つ以上
|
63
|
-
条件が2つある場合
|
64
|
+
(条件が2つある場合は省略)
|
65
|
+
datasetの要素をリストで宣言してしまえばいくつでもいけそうです
|
64
66
|
```javascript
|
65
67
|
<script>
|
66
68
|
document.addEventListener('change',e=>{
|
67
69
|
const t=e.target;
|
70
|
+
const list=["university","major","graduate"];
|
68
|
-
if(t.closest(
|
71
|
+
if(t.closest(list.map(x=>`[name=${x}]`).join(','))){
|
69
|
-
const
|
72
|
+
const selected={};
|
70
|
-
|
73
|
+
list.forEach(x=>selected[x]=[...document.querySelectorAll(`[name=${x}]:checked`)].map(x=>x.value));
|
71
74
|
document.querySelectorAll('.list_item').forEach(x=>{
|
72
75
|
let flg=false;
|
73
|
-
if(
|
76
|
+
if(Object.values(selected).flat().length>0){
|
74
|
-
flg=true &&
|
75
|
-
|
77
|
+
flg=list.map(y=>selected[y].length==0||JSON.parse(x.dataset[y]).filter(z=>selected[y].indexOf(z)>=0).length).reduce((x,y)=>x&&y);
|
76
|
-
(majo.length==0 || JSON.parse(x.dataset.major).filter(y=>majo.indexOf(y)>=0).length)
|
77
78
|
}
|
78
79
|
x.toggleAttribute('hidden',!flg);
|
79
80
|
});
|
@@ -101,9 +102,60 @@
|
|
101
102
|
<li><label><input type="checkbox" name="major" value="law">法学部</label></li>
|
102
103
|
</ul>
|
103
104
|
<hr>
|
104
|
-
<ul
|
105
|
+
<ul>
|
105
|
-
<li
|
106
|
+
<li><label><input type="checkbox" name="graduate" value="goSame">院進(同大学)</label></li>
|
106
|
-
<li
|
107
|
+
<li><label><input type="checkbox" name="graduate" value="goDiffe">院進(他大学)</label></li>
|
108
|
+
<li><label><input type="checkbox" name="graduate" value="work">就職</label></li>
|
107
|
-
<li
|
109
|
+
<li><label><input type="checkbox" name="graduate" value="establish">起業</label></li>
|
110
|
+
<hr>
|
111
|
+
<ul class="list">
|
112
|
+
<li class="list_item"
|
113
|
+
data-university='["tokyo","kyoto"]'
|
114
|
+
data-major='["science","engineering"]'
|
115
|
+
data-graduate='["goSame","goDiffe"]'
|
116
|
+
>国公立理系院進学費: xx万円
|
117
|
+
</li>
|
118
|
+
<li class="list_item"
|
119
|
+
data-university='["tokyo","kyoto"]'
|
120
|
+
data-major='["science","engineering"]'
|
121
|
+
data-graduate='["work","establish"]'
|
122
|
+
>国公立理系就職学費: xx万円
|
123
|
+
</li>
|
124
|
+
<li class="list_item"
|
125
|
+
data-university='["tokyo","kyoto"]'
|
126
|
+
data-major='["letters","law"]'
|
127
|
+
data-graduate='["goSame","goDiffe"]'
|
128
|
+
>国公立文系院進学費: xx万円
|
129
|
+
</li>
|
130
|
+
<li class="list_item"
|
131
|
+
data-university='["tokyo","kyoto"]'
|
132
|
+
data-major='["letters","law"]'
|
133
|
+
data-graduate='["work","establish"]'
|
134
|
+
>国公立文系就職学費: xx万円
|
135
|
+
</li>
|
136
|
+
<li class="list_item"
|
137
|
+
data-university='["keio","waseda"]'
|
138
|
+
data-major='["science","engineering"]'
|
139
|
+
data-graduate='["goSame","goDiffe"]'
|
140
|
+
>私立理系院進学費: xx万円
|
141
|
+
</li>
|
142
|
+
<li class="list_item"
|
143
|
+
data-university='["keio","waseda"]'
|
144
|
+
data-major='["science","engineering"]'
|
145
|
+
data-graduate='["work","establish"]'
|
146
|
+
>私立理系就職学費: xx万円
|
147
|
+
</li>
|
148
|
+
<li class="list_item"
|
149
|
+
data-university='["keio","waseda"]'
|
150
|
+
data-major='["letters","law"]'
|
151
|
+
data-graduate='["goSame","goDiffe"]'
|
152
|
+
>私立文系院進学費: xx万円
|
153
|
+
</li>
|
154
|
+
<li class="list_item"
|
155
|
+
data-university='["keio","waseda"]'
|
156
|
+
data-major='["letters","law"]'
|
157
|
+
data-graduate='["work","establish"]'
|
158
|
+
>私立文系就職学費: xx万円
|
159
|
+
</li>
|
108
160
|
</ul>
|
109
|
-
|
161
|
+
```
|
2
調整
test
CHANGED
@@ -60,3 +60,50 @@
|
|
60
60
|
<li class="list_item" data-university='["tokyo","kyoto","osaka"]'>東京,京都,大阪</li>
|
61
61
|
</ul>
|
62
62
|
```
|
63
|
+
条件が2つある場合
|
64
|
+
```javascript
|
65
|
+
<script>
|
66
|
+
document.addEventListener('change',e=>{
|
67
|
+
const t=e.target;
|
68
|
+
if(t.closest('[name=university],[name=major]')){
|
69
|
+
const univ=[...document.querySelectorAll('[name=university]:checked')].map(x=>x.value);
|
70
|
+
const majo=[...document.querySelectorAll('[name=major]:checked')].map(x=>x.value);
|
71
|
+
document.querySelectorAll('.list_item').forEach(x=>{
|
72
|
+
let flg=false;
|
73
|
+
if(univ.length>0 || majo.length>0){
|
74
|
+
flg=true &&
|
75
|
+
(univ.length==0 || JSON.parse(x.dataset.university).filter(y=>univ.indexOf(y)>=0).length) &&
|
76
|
+
(majo.length==0 || JSON.parse(x.dataset.major).filter(y=>majo.indexOf(y)>=0).length)
|
77
|
+
}
|
78
|
+
x.toggleAttribute('hidden',!flg);
|
79
|
+
});
|
80
|
+
}
|
81
|
+
});
|
82
|
+
window.addEventListener('DOMContentLoaded', ()=>{
|
83
|
+
const e = new CustomEvent("HTMLEvents");
|
84
|
+
e.initEvent('change', true, true );
|
85
|
+
document.querySelector('[name=university]').dispatchEvent(e);
|
86
|
+
});
|
87
|
+
</script>
|
88
|
+
<form>
|
89
|
+
<ul>
|
90
|
+
<li>
|
91
|
+
<label><input type="checkbox" name="university" value="tokyo">東京大学</label></li>
|
92
|
+
<li><label><input type="checkbox" name="university" value="kyoto">京都大学</label></li>
|
93
|
+
<li><label><input type="checkbox" name="university" value="keio">慶應大学</label></li>
|
94
|
+
<li><label><input type="checkbox" name="university" value="waseda">早稲田大学</label></li>
|
95
|
+
</ul>
|
96
|
+
<hr>
|
97
|
+
<ul>
|
98
|
+
<li><label><input type="checkbox" name="major" value="science">理学部</label></li>
|
99
|
+
<li><label><input type="checkbox" name="major" value="engineering">工学部</label></li>
|
100
|
+
<li><label><input type="checkbox" name="major" value="letters">文学部</label></li>
|
101
|
+
<li><label><input type="checkbox" name="major" value="law">法学部</label></li>
|
102
|
+
</ul>
|
103
|
+
<hr>
|
104
|
+
<ul class="list"><li class="list_item" data-university='["tokyo","kyoto"]' data-major='["science","engineering"]'>国公立理系学費: xx万円</li>
|
105
|
+
<li class="list_item" data-university='["tokyo","kyoto"]' data-major='["letters","law"]'>国公立文系学費: xx万円</li>
|
106
|
+
<li class="list_item" data-university='["keio","waseda"]' data-major='["science","engineering"]'>私立理系学費: xx万円</li>
|
107
|
+
<li class="list_item" data-university='["keio","waseda"]' data-major='["letters","law"]'>私立文系学費: xx万円</li>
|
108
|
+
</ul>
|
109
|
+
```
|
1
追記
test
CHANGED
@@ -27,5 +27,36 @@
|
|
27
27
|
<li class="list_item" data-university='["tokyo","osaka"]'>東京,大阪</li>
|
28
28
|
<li class="list_item" data-university='["tokyo","kyoto","osaka"]'>東京,京都,大阪</li>
|
29
29
|
</ul>
|
30
|
-
|
31
30
|
```
|
31
|
+
生のjsならこう?
|
32
|
+
```javascript
|
33
|
+
<script>
|
34
|
+
document.addEventListener('change',e=>{
|
35
|
+
const t=e.target;
|
36
|
+
if(t.closest('.university')){
|
37
|
+
const vals=[...document.querySelectorAll('.university:checked')].map(x=>x.value);
|
38
|
+
document.querySelectorAll('.list_item').forEach(x=>{
|
39
|
+
const flg=JSON.parse(x.dataset.university).filter(y=>vals.indexOf(y)>=0).length;
|
40
|
+
x.toggleAttribute('hidden',!flg);
|
41
|
+
});
|
42
|
+
}
|
43
|
+
});
|
44
|
+
window.addEventListener('DOMContentLoaded', ()=>{
|
45
|
+
const e = new CustomEvent("HTMLEvents");
|
46
|
+
e.initEvent('change', true, true );
|
47
|
+
document.querySelector('.university').dispatchEvent(e);
|
48
|
+
});
|
49
|
+
</script>
|
50
|
+
<label><input type="checkbox" class="university" value="tokyo">東京</lavel>
|
51
|
+
<label><input type="checkbox" class="university" value="kyoto">京都</lavel>
|
52
|
+
<label><input type="checkbox" class="university" value="osaka">大阪</lavel>
|
53
|
+
<ul>
|
54
|
+
<li class="list_item" data-university='["tokyo"]'>東京</li>
|
55
|
+
<li class="list_item" data-university='["kyoto"]'>京都</li>
|
56
|
+
<li class="list_item" data-university='["osaka"]'>大阪</li>
|
57
|
+
<li class="list_item" data-university='["tokyo","kyoto"]'>東京,京都</li>
|
58
|
+
<li class="list_item" data-university='["kyoto","osaka"]'>京都,大阪</li>
|
59
|
+
<li class="list_item" data-university='["tokyo","osaka"]'>東京,大阪</li>
|
60
|
+
<li class="list_item" data-university='["tokyo","kyoto","osaka"]'>東京,京都,大阪</li>
|
61
|
+
</ul>
|
62
|
+
```
|