teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

情報の追加。

2016/08/05 10:58

投稿

kei344
kei344

スコア69625

answer CHANGED
@@ -32,4 +32,82 @@
32
32
  }
33
33
  } );
34
34
  } );
35
- ```**動くサンプル:**[https://jsfiddle.net/jwqyan5j/](https://jsfiddle.net/jwqyan5j/)
35
+ ```**動くサンプル:**[https://jsfiddle.net/jwqyan5j/](https://jsfiddle.net/jwqyan5j/)
36
+
37
+
38
+ ---
39
+
40
+ **追記:**
41
+
42
+ 絞込みが出来れば #all とかおまけでいいよね?と手を抜いていました。下記でそれについては是正されていると思われます。
43
+
44
+ ```JavaScript
45
+ $( function() {
46
+ $( '#search li label input:not(#all)' ).click( function() {
47
+ var inputkey = [ 'attribute', 'type', 'option' ]
48
+ , i, l = inputkey.length
49
+ , $res, $tmp, res = []
50
+ , $all = $( '#all' );
51
+ ;
52
+ $tmp = $( '#list > li' ).removeClass( 'active' );
53
+ for ( i = 0; i < l; i++ ) {
54
+ res = []
55
+ $( '#search input[id^="' + inputkey[ i ] + '"]:checked' ).each( function() {
56
+ res.push( $( this )[ 0 ].id );
57
+ } );
58
+ if ( !res.length ) { continue; }
59
+ $tmp = $( '#list > li.' + res.join( ', #list > li.' ) );
60
+ if ( !$res || !$res.length ) {
61
+ $res = $tmp;
62
+ } else if ( $tmp.length ) {
63
+ $res = $res.filter( '.' + res.join( ', .' ) );
64
+ }
65
+ }
66
+ if ( $res && $res.length ) {
67
+ $res.addClass( 'active' );
68
+ $all.prop( 'checked', false );
69
+ } else {
70
+ // No Selected
71
+ res = false;
72
+ $all.prop( 'checked', true );
73
+ }
74
+ } );
75
+ $( '#all' ).click( function() {
76
+ if ( $( this ).prop( 'checked') === true ) {
77
+ $( '#list > li' ).removeClass( 'active' );
78
+ $( '#search input:checked:not(#all)' ).prop( 'checked', false );
79
+ }
80
+ } );
81
+ } );
82
+ ```**動くサンプル:**[https://jsfiddle.net/jwqyan5j/2/](https://jsfiddle.net/jwqyan5j/2/)
83
+
84
+ ---
85
+
86
+ > 今回、絞り込み用のidとclassを「hogehoge01」というような形で、ナンバリングしたものを振っているのですが、これを、ナンバリングではなく、個別に単語で指定することは可能なのでしょうか。
87
+
88
+ 可能です。
89
+ 下記部分は「idがinputkey[ i ]('attribute', 'type', 'option')から始まるもののうち、チェックされているもの」を1まとまりとして扱っています。その上でidをクラス名として後で使うために保存しています。
90
+
91
+ ```JavaScript
92
+ $( '#search input[id^="' + inputkey[ i ] + '"]:checked' ).each( function() {
93
+ res.push( $( this )[ 0 ].id );
94
+ } );
95
+ ```
96
+ ```HTML
97
+ <input type="checkbox" id="attribute01" class="sort">
98
+ ```例えばクラスで1まとまりにすることも出来ます。クラス名で使用する単語をid以外の要素(ここではdata-key)にすることも出来ます。
99
+ ```JavaScript
100
+ $( '#search input.' + inputkey[ i ] + ':checked' ).each( function() {
101
+ res.push( $( this ).attr( 'data-key' ) );
102
+ } );
103
+ ```
104
+ ```HTML
105
+ <input type="checkbox" data-key="keyword" class="sort attribute">
106
+ ```
107
+
108
+ ---
109
+
110
+ > 検索条件にヒットするものがなかった場合
111
+
112
+ 「// No Selected」の後の部分でそういったコードを追加すればいいと思いますよ。
113
+ (今はとりあえず#allをチェックすることしかしていません)