質問編集履歴

2

記述の修正

2019/04/09 06:08

投稿

a2s
a2s

スコア39

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- ①最初の5件が表示された状態
7
+ ①最初の10件が表示された状態
8
8
 
9
9
  →「もっと見る」ボタンをクリックするたびに、5件ずつ表示されていく
10
10
 

1

記述追加

2019/04/09 06:07

投稿

a2s
a2s

スコア39

test CHANGED
File without changes
test CHANGED
@@ -28,14 +28,294 @@
28
28
 
29
29
  ②ソート用のJSの記述で実装ができた
30
30
 
31
-
32
-
33
- ①+②で合わせると動かなくなる。
34
-
35
- また、ソートした際
36
-
37
- ・ソート、「もっ」はそれぞれバラバラに実装は
38
-
39
-  が、併せると動かなくなる
40
-
41
- ・さらに、ソートした際のカテゴリは引き継がれず、「もっと見る」ですべての要素が表示されてしまう
31
+ →①と②を合わせると、ソートがうまく機能しない。
32
+
33
+ →また、ソートしたあと「もっと見」を押す、すべての要素が表示されてしまう
34
+
35
+
36
+
37
+ 上手いこできないかと模索していすが、お分かりの方が居ましらご教授いただけると幸いです。
38
+
39
+
40
+
41
+ ```HTML
42
+
43
+ <!DOCTYPE html>
44
+
45
+ <html>
46
+
47
+ <head>
48
+
49
+ <meta charset="utf-8">
50
+
51
+ <title>jQuery_sample</title>
52
+
53
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
54
+
55
+ </head>
56
+
57
+ <body>
58
+
59
+
60
+
61
+ <div class="search-box">
62
+
63
+ <input type="checkbox" name="category" value="カテゴリ-01">カテゴリ-01
64
+
65
+ <input type="checkbox" name="category" value="カテゴリ-02">カテゴリ-02
66
+
67
+ <input type="checkbox" name="category" value="カテゴリ-03">カテゴリ-03
68
+
69
+ <input type="checkbox" name="category" value="カテゴリ-04">カテゴリ-04
70
+
71
+ <input type="checkbox" name="category" value="カテゴリ-05">カテゴリ-05
72
+
73
+ <input type="checkbox" name="category" value="カテゴリ-06">カテゴリ-06
74
+
75
+ <input type="checkbox" name="category" value="カテゴリ-07">カテゴリ-07
76
+
77
+ <input type="checkbox" name="category" value="カテゴリ-08">カテゴリ-08
78
+
79
+ <input type="checkbox" name="category" value="カテゴリ-09">カテゴリ-09
80
+
81
+ <input type="checkbox" name="category" value="カテゴリ-10">カテゴリ-10
82
+
83
+ <input type="checkbox" name="category" value="カテゴリ-11">カテゴリ-11
84
+
85
+ <input type="checkbox" name="category" value="カテゴリ-12">カテゴリ-12
86
+
87
+ <input type="checkbox" name="category" value="カテゴリ-13">カテゴリ-13
88
+
89
+ <input type="checkbox" name="category" value="カテゴリ-14">カテゴリ-14
90
+
91
+ <input type="checkbox" name="category" value="カテゴリ-15">カテゴリ-15
92
+
93
+ <input type="checkbox" name="category" value="カテゴリ-16">カテゴリ-16
94
+
95
+ <input type="checkbox" name="category" value="カテゴリ-17">カテゴリ-17
96
+
97
+ <input type="checkbox" name="category" value="カテゴリ-18">カテゴリ-18
98
+
99
+ <input type="checkbox" name="category" value="カテゴリ-19">カテゴリ-19
100
+
101
+ <input type="checkbox" name="category" value="カテゴリ-20">カテゴリ-20
102
+
103
+ </div>
104
+
105
+
106
+
107
+ <ul class="list" id="number_list">
108
+
109
+ <li class="list_item" data-category='["カテゴリ-13", "カテゴリ-16"]'>Category: カテゴリ-13, カテゴリ-16</li>
110
+
111
+ <li class="list_item" data-category='["カテゴリ-14"]'>Category: カテゴリ-14</li>
112
+
113
+ <li class="list_item" data-category='["カテゴリ-06", "カテゴリ-19"]'>Category: カテゴリ-06, カテゴリ-19</li>
114
+
115
+ <li class="list_item" data-category='["カテゴリ-02", "カテゴリ-10"]'>Category: カテゴリ-02, カテゴリ-10</li>
116
+
117
+ <li class="list_item" data-category='["カテゴリ-17", "カテゴリ-20"]'>Category: カテゴリ-17, カテゴリ-20</li>
118
+
119
+ <li class="list_item" data-category='["カテゴリ-05"]'>Category: カテゴリ-05</li>
120
+
121
+ <li class="list_item" data-category='["カテゴリ-05", "カテゴリ-18"]'>Category: カテゴリ-05, カテゴリ-18</li>
122
+
123
+ <li class="list_item" data-category='["カテゴリ-01", "カテゴリ-14"]'>Category: カテゴリ-01, カテゴリ-14</li>
124
+
125
+ <li class="list_item" data-category='["カテゴリ-08"]'>Category: カテゴリ-08</li>
126
+
127
+ <li class="list_item" data-category='["カテゴリ-05", "カテゴリ-07", "カテゴリ-09", "カテゴリ-17"]'>Category: カテゴリ-05, カテゴリ-07, カテゴリ-09, カテゴリ-17</li>
128
+
129
+ <li class="list_item" data-category='["カテゴリ-12"]'>Category: カテゴリ-12</li>
130
+
131
+ <li class="list_item" data-category='["カテゴリ-03"]'>Category: カテゴリ-03</li>
132
+
133
+ <li class="list_item" data-category='カテゴリ-11'>Category: カテゴリ-11</li>
134
+
135
+ <li class="list_item" data-category='["カテゴリ-15", "カテゴリ-04"]'>Category: カテゴリ-15,カテゴリ-04</li>
136
+
137
+ </ul>
138
+
139
+ <button type=button id="more_btn">もっと見る</button>
140
+
141
+
142
+
143
+ </body>
144
+
145
+ </html>
146
+
147
+ ```
148
+
149
+ ```JQuery
150
+
151
+ //もっと見る
152
+
153
+ var listContents = $("#number_list li").length;
154
+
155
+ $("#number_list").each(function(){
156
+
157
+ var Num = 10, //最初の表示件数
158
+
159
+ gtNum = Num-1;
160
+
161
+ $(this).find('#more_btn').show();
162
+
163
+ $(this).find("li:not(:lt("+Num+"))").hide();
164
+
165
+ $('#more_btn').click(function(){
166
+
167
+ Num +=5; //5個ずつ追加
168
+
169
+ $(this).parent().find("li:lt("+Num+")").slideDown();
170
+
171
+ if(listContents <= Num){
172
+
173
+ $('#more_btn').hide();
174
+
175
+ }
176
+
177
+ });
178
+
179
+
180
+
181
+ //ソート
182
+
183
+ $(document).on('change', searchBox + ' input', function() {
184
+
185
+ search_filter();
186
+
187
+ });
188
+
189
+ });
190
+
191
+
192
+
193
+ /*** リストの絞り込みを行う*/
194
+
195
+ function search_filter() {
196
+
197
+ $(listItem).removeClass(hideClass);
198
+
199
+ for (var i = 0; i < $(searchBox).length; i++) {
200
+
201
+ var name = $(searchBox).eq(i).find('input').attr('name');
202
+
203
+ var searchData = get_selected_input_items(name);
204
+
205
+ if(searchData.length === 0 || searchData[0] === '') {
206
+
207
+ continue;
208
+
209
+ }
210
+
211
+ for (var j = 0; j < $(listItem).length; j++) {
212
+
213
+ var itemData = get_setting_values_in_item($(listItem).eq(j), name);
214
+
215
+ var check = array_match_check(itemData, searchData);
216
+
217
+ if(!check) {
218
+
219
+ $(listItem).eq(j).addClass(hideClass);
220
+
221
+ }
222
+
223
+ }
224
+
225
+ }
226
+
227
+ }
228
+
229
+
230
+
231
+ /*** inputで選択されている値の一覧を取得する
232
+
233
+ * @param{String} name 対象にするinputのname属性の値
234
+
235
+ * @return {Array} 選択されているinputのvalue属性の値
236
+
237
+ */
238
+
239
+ function get_selected_input_items(name) {
240
+
241
+ var searchData = [];
242
+
243
+ $('[name=' + name + ']:checked').each(function() {
244
+
245
+ searchData.push($(this).val());
246
+
247
+ });
248
+
249
+ return searchData;
250
+
251
+ }
252
+
253
+
254
+
255
+ /*** リスト内のアイテムに設定している値の一覧を取得する
256
+
257
+ * @param{Object} target 対象にするアイテムのjQueryオブジェクト
258
+
259
+ * @param{String} data 対象にするアイテムのdata属性の名前
260
+
261
+ * @return {Array} 対象にするアイテムのdata属性の値
262
+
263
+ */
264
+
265
+ function get_setting_values_in_item(target, data) {
266
+
267
+ var itemData = target.data(data);
268
+
269
+ if(!Array.isArray(itemData)) {
270
+
271
+ itemData = [itemData];
272
+
273
+ }
274
+
275
+ return itemData;
276
+
277
+ }
278
+
279
+
280
+
281
+ /*** 2つの配列内で一致する文字列があるかどうかを調べる
282
+
283
+ * @param{Array} arr1 調べる配列1
284
+
285
+ * @param{Array} arr2 調べる配列2
286
+
287
+ * @return {Boolean}一致する値があるかどうか
288
+
289
+ */
290
+
291
+ function array_match_check(arr1, arr2) {
292
+
293
+ var arrCheck = false;
294
+
295
+ for (var i = 0; i < arr1.length; i++) {
296
+
297
+ if(arr2.indexOf(arr1[i]) >= 0) {
298
+
299
+ arrCheck = true;
300
+
301
+ break;
302
+
303
+ }
304
+
305
+ }
306
+
307
+ return arrCheck;
308
+
309
+ }
310
+
311
+ ```
312
+
313
+ ```CSS
314
+
315
+ .is-hide {
316
+
317
+ display: none;
318
+
319
+ }
320
+
321
+ ```