質問編集履歴

3

出力したHTMLを追記

2019/01/19 11:21

投稿

miyu94
miyu94

スコア18

test CHANGED
File without changes
test CHANGED
@@ -229,3 +229,129 @@
229
229
 
230
230
 
231
231
  わかる方がいらっしゃいましたら、お教えください。よろしくお願いします。
232
+
233
+
234
+
235
+ ### 追記
236
+
237
+ 「該当のソースコード」を動かした場合のHTML
238
+
239
+ ```HTML
240
+
241
+ <!--1~7までの数字をコメントした投稿-->
242
+
243
+ <div id="comments_1">
244
+
245
+ <div id="list">1</div>
246
+
247
+ <div id="list">2</div>
248
+
249
+ <div id="list">3</div>
250
+
251
+ <div id="list">4</div>
252
+
253
+ <div id="list">5</div>
254
+
255
+ <div id="list">6</div>
256
+
257
+ <div id="list">7</div>
258
+
259
+ <div id="more_btn">さらに表示</div>
260
+
261
+ <div id="close_btn">戻す</div>
262
+
263
+ </div>
264
+
265
+
266
+
267
+ <!--A, B, C とコメントした投稿-->
268
+
269
+ <div id="comments_2">
270
+
271
+ <div id="list">A</div>
272
+
273
+ <div id="list">B</div>
274
+
275
+ <div id="list">C</div>
276
+
277
+ <div id="more_btn">さらに表示</div>
278
+
279
+ <div id="close_btn">戻す</div>
280
+
281
+ </div>
282
+
283
+ ```
284
+
285
+
286
+
287
+ 「試したこと」のコードを動かした場合
288
+
289
+
290
+
291
+ ※「コメントのリストidも、ループ回数に応じて変わるようにした」と書きましたが、コードを間違えていました。$loop->parent->iteration とすれば Commentのループ回数ではなく、Postのループ回数にアクセスできますね。
292
+
293
+
294
+
295
+ ```PHP
296
+
297
+ @foreach($post->comments as $comment)
298
+
299
+ <div id="list_{{ $loop->parent->iteration }}">{{ $comment->message }}</div>
300
+
301
+ @endforeach
302
+
303
+ ```
304
+
305
+
306
+
307
+ 出力結果
308
+
309
+
310
+
311
+ ```HTML
312
+
313
+ <!--1~7までの数字をコメントした投稿-->
314
+
315
+ <div id="comments_1">
316
+
317
+ <div id="list_1">1</div>
318
+
319
+ <div id="list_1">2</div>
320
+
321
+ <div id="list_1">3</div>
322
+
323
+ <div id="list_1">4</div>
324
+
325
+ <div id="list_1">5</div>
326
+
327
+ <div id="list_1">6</div>
328
+
329
+ <div id="list_1">7</div>
330
+
331
+ <div id="more_btn">さらに表示</div>
332
+
333
+ <div id="close_btn">戻す</div>
334
+
335
+ </div>
336
+
337
+
338
+
339
+ <!--A, B, C とコメントした投稿-->
340
+
341
+ <div id="comments_2">
342
+
343
+ <div id="list_2">A</div>
344
+
345
+ <div id="list_2">B</div>
346
+
347
+ <div id="list_2">C</div>
348
+
349
+ <div id="more_btn">さらに表示</div>
350
+
351
+ <div id="close_btn">戻す</div>
352
+
353
+ </div>
354
+
355
+
356
+
357
+ ```

2

タグの間違い

2019/01/19 11:21

投稿

miyu94
miyu94

スコア18

test CHANGED
File without changes
test CHANGED
File without changes

1

なぜか途中でとうこうされてた。

2019/01/19 09:33

投稿

miyu94
miyu94

スコア18

test CHANGED
File without changes
test CHANGED
@@ -10,11 +10,15 @@
10
10
 
11
11
 
12
12
 
13
+ Postをforeachで回して投稿一覧を表示させます。
14
+
15
+
16
+
13
17
  投稿一覧ページで、各々の投稿の下に紐づくコメントを表示します。
14
18
 
19
+
20
+
15
- コメントはデフォルトで3件だけ表示し「さらに表示」ボタンを押すと追加で新たな3件が表示される仕組みです。全件表示したら「戻す」ボタンを表示し、押すとデフォルト状態に戻します。
21
+ コメントはデフォルトで3件だけ表示し「さらに表示」ボタンを押すと追加で新たな3件が表示される仕組みです。全件表示したら「戻す」ボタンを表示し、押すとデフォルト状態に戻します。再び「さらに表示」を押すと、全件表示されます。
16
-
17
- 再び「さらに表示」を押すと、全件表示されます。
18
22
 
19
23
 
20
24
 
@@ -22,15 +26,13 @@
22
26
 
23
27
 
24
28
 
25
- ループ回数に応じてコメント欄のidを変え、ループするごとにjQuery側を動作させたいですが、うまくいきません。恐らくjQueryが読み込まれるのは一度だけなので、ループごとに処理を繰り返すことができない?のかと思います。
29
+ ループ回数に応じてコメント欄のidを変え、ループするごとにjQuery側を動作させたいですが、うまくいきません。恐らくjQueryが読み込まれるのは一度だけなので、ループごとに処理を繰り返すことができない?のかと思います。
26
-
27
-
28
-
30
+
31
+
32
+
29
- とりあえずjQuery側で var iteration = 1; として、
33
+ とりあえずjQuery側で var iteration=1; (Postのループ回数が1) としました。
30
-
34
+
31
- 最初のforeachループ(つまり一番上の投稿)のコメントのみ正常に動作するようにしました
35
+ 最初の投稿のコメントのみ期待通りに動作しま
32
-
33
-
34
36
 
35
37
 
36
38
 
@@ -148,26 +150,82 @@
148
150
 
149
151
 
150
152
 
153
+ 投稿をforeachした回数だけ、for文でjQueryの処理を回しました。
154
+
155
+
156
+
151
- PHPのループ内で現在のループ回数を変数に保持
157
+ 現在のループ回数を保持する配列を作り
158
+
159
+
152
160
 
153
161
  ```PHP
154
162
 
163
+ //@foreach($posts as $post)の内側
164
+
155
- $iteration = $loop->iteration;
165
+ $iterations[] = $loop->iteration;
166
+
167
+
168
+
156
-
169
+ //@foreach($posts as $post)の外側
170
+
171
+ $iterations = json_encode($iterations);
172
+
157
- ```
173
+ ```
158
-
159
-
160
-
174
+
175
+
176
+
161
- jQuery側でループ回数を受け取ろしました
177
+ コメントのリストidも、ループ回数に応じて変わるよしました
162
-
178
+
179
+
180
+
163
- ```Javascript
181
+ ```PHP
164
-
182
+
165
- var iteration = {{ $iteration }};
183
+ @foreach($post->comments as $comment)
184
+
166
-
185
+ <div id="list_{{ $loop->iteration }}">{{ $comment->message }}</div>
186
+
187
+ @endforeach
188
+
167
- ```
189
+ ```
190
+
191
+
192
+
168
-
193
+ ループ回数を保持する配列をjQueryに渡して、その回数だけfor文で回しました。
194
+
195
+
196
+
169
-
197
+ ```JavaScript
198
+
170
-
199
+ let iterations = <?php echo $iterations; ?>;
200
+
201
+
202
+
203
+ for(var i=0; i<iterations.length; i++){
204
+
205
+   //この中に上と同じjQueryのコードを記述
206
+
207
+    //iteration → iterations[i] とする
208
+
209
+    //list → list_iterations[i] とする
210
+
211
+ }
212
+
213
+ ```
214
+
215
+
216
+
217
+ これで試しましたが、コメントがデフォルトで全件表示されてしまいます。
218
+
219
+ ###
220
+
221
+
222
+
223
+ 今回のように、どの投稿のコメントなのかをjQueryが判別し、投稿のループ内で逐一jQueryを実行したい場合、どうすればよいですか。
224
+
225
+
226
+
171
- これだと最後ループ回数か渡せません
227
+ また別方法で実現可能でたら教えていただきたいです
172
-
228
+
229
+
230
+
173
- 仮に配列にて渡
231
+ わかる方がいらっゃいましたら、お教えください。よろしくお願いしま