回答編集履歴

1

情報の追加。

2016/08/05 10:58

投稿

kei344
kei344

スコア69407

test CHANGED
@@ -67,3 +67,159 @@
67
67
  } );
68
68
 
69
69
  ```**動くサンプル:**[https://jsfiddle.net/jwqyan5j/](https://jsfiddle.net/jwqyan5j/)
70
+
71
+
72
+
73
+
74
+
75
+ ---
76
+
77
+
78
+
79
+ **追記:**
80
+
81
+
82
+
83
+ 絞込みが出来れば #all とかおまけでいいよね?と手を抜いていました。下記でそれについては是正されていると思われます。
84
+
85
+
86
+
87
+ ```JavaScript
88
+
89
+ $( function() {
90
+
91
+ $( '#search li label input:not(#all)' ).click( function() {
92
+
93
+ var inputkey = [ 'attribute', 'type', 'option' ]
94
+
95
+ , i, l = inputkey.length
96
+
97
+ , $res, $tmp, res = []
98
+
99
+ , $all = $( '#all' );
100
+
101
+ ;
102
+
103
+ $tmp = $( '#list > li' ).removeClass( 'active' );
104
+
105
+ for ( i = 0; i < l; i++ ) {
106
+
107
+ res = []
108
+
109
+ $( '#search input[id^="' + inputkey[ i ] + '"]:checked' ).each( function() {
110
+
111
+ res.push( $( this )[ 0 ].id );
112
+
113
+ } );
114
+
115
+ if ( !res.length ) { continue; }
116
+
117
+ $tmp = $( '#list > li.' + res.join( ', #list > li.' ) );
118
+
119
+ if ( !$res || !$res.length ) {
120
+
121
+ $res = $tmp;
122
+
123
+ } else if ( $tmp.length ) {
124
+
125
+ $res = $res.filter( '.' + res.join( ', .' ) );
126
+
127
+ }
128
+
129
+ }
130
+
131
+ if ( $res && $res.length ) {
132
+
133
+ $res.addClass( 'active' );
134
+
135
+ $all.prop( 'checked', false );
136
+
137
+ } else {
138
+
139
+ // No Selected
140
+
141
+ res = false;
142
+
143
+ $all.prop( 'checked', true );
144
+
145
+ }
146
+
147
+ } );
148
+
149
+ $( '#all' ).click( function() {
150
+
151
+ if ( $( this ).prop( 'checked') === true ) {
152
+
153
+ $( '#list > li' ).removeClass( 'active' );
154
+
155
+ $( '#search input:checked:not(#all)' ).prop( 'checked', false );
156
+
157
+ }
158
+
159
+ } );
160
+
161
+ } );
162
+
163
+ ```**動くサンプル:**[https://jsfiddle.net/jwqyan5j/2/](https://jsfiddle.net/jwqyan5j/2/)
164
+
165
+
166
+
167
+ ---
168
+
169
+
170
+
171
+ > 今回、絞り込み用のidとclassを「hogehoge01」というような形で、ナンバリングしたものを振っているのですが、これを、ナンバリングではなく、個別に単語で指定することは可能なのでしょうか。
172
+
173
+
174
+
175
+ 可能です。
176
+
177
+ 下記部分は「idがinputkey[ i ]('attribute', 'type', 'option')から始まるもののうち、チェックされているもの」を1まとまりとして扱っています。その上でidをクラス名として後で使うために保存しています。
178
+
179
+
180
+
181
+ ```JavaScript
182
+
183
+ $( '#search input[id^="' + inputkey[ i ] + '"]:checked' ).each( function() {
184
+
185
+ res.push( $( this )[ 0 ].id );
186
+
187
+ } );
188
+
189
+ ```
190
+
191
+ ```HTML
192
+
193
+ <input type="checkbox" id="attribute01" class="sort">
194
+
195
+ ```例えばクラスで1まとまりにすることも出来ます。クラス名で使用する単語をid以外の要素(ここではdata-key)にすることも出来ます。
196
+
197
+ ```JavaScript
198
+
199
+ $( '#search input.' + inputkey[ i ] + ':checked' ).each( function() {
200
+
201
+ res.push( $( this ).attr( 'data-key' ) );
202
+
203
+ } );
204
+
205
+ ```
206
+
207
+ ```HTML
208
+
209
+ <input type="checkbox" data-key="keyword" class="sort attribute">
210
+
211
+ ```
212
+
213
+
214
+
215
+ ---
216
+
217
+
218
+
219
+ > 検索条件にヒットするものがなかった場合
220
+
221
+
222
+
223
+ 「// No Selected」の後の部分でそういったコードを追加すればいいと思いますよ。
224
+
225
+ (今はとりあえず#allをチェックすることしかしていません)