質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

637閲覧

for文でn回ずつループさせる

ysfree14

総合スコア19

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2019/08/19 08:43

編集2019/08/19 09:29

for文を使ってjsonの要素を抜き出したいと考えています。
フィルタリングで要素の出し分けを行い、8個ずつ表示させたいと考えています。
最初に8個表示させて、「もっと見る」をクリックでさらに8個ずつ追加していくことはできるのでしょうか?

html

1<form> 2  <span> 3    <input type="radio" name="list" value="all" checked> 4    <label>All</label> 5  </span> 6  <span> 7    <input type="radio" name="list" value="cate"> 8    <label>cafe</label> 9  </span> 10  <span> 11    <input type="radio" name="list" value="tokyo"> 12    <label>tokyo</label> 13  </span> 14  <span> 15    <input type="radio" name="list" value="autum"> 16    <label >autum</label> 17  </span> 18</form> 19<ul id="imageWrap"></ul> 20<p class="more-btn">もっと見る</p>

jquery

1//変数設定 2var $imageWrap=$("#imageWrap"); 3var alldata=[]; //ここはすべてのデータを保持しておく配列 4var filterdata=[]; //フィルターを掛けたデータを保持する配列 5 6/最初に読み込んだ時に発生する関数 7$.getJSON('jsonのソース',init); 8 9function init(data){ 10//全データを保持しておく 11alldata=data; 12 13//とりあえず全データを代入しておく 14filterdata=alldata; 15 16//データを表示させる 17display(); 18} 19 20//画像表示させるための関数 21function display(){ 22  $imageWrap.empty(); 23  var dataArray = filterdata; 24  for(var i=0; i<=7; i++){ 25    $('<div class="elm"><img src="'+filterdata[i].url+' "></div>').appendTo($imageWrap); 26  } 27} 28 29//ラジオボタンが変わった時にフィルタリングする関数 30$('input:radio').change(function(){ 31  //チェックボタンの状況によってフィルタリングする 32  var cate=$(this).val(); 33  //フィルターの配列をいったん空っぽにする 34  filterdata=[]; 35 36  if(cate==="all"){//allが選択されたら全データを保持 37    filterdata=alldata; 38 39  }else{ 40    filterdata=$.grep(alldata,function(n){ 41      return n.category===cate; 42    }); 43  } 44 45  display(); 46}); 47 48//もっと見るで要素を追加させたい 49$('.more-btn').click(function(){ 50  display(); 51});

参考にしたのはこちらのサイトです。
http://the-zombis.sakura.ne.jp/wp/blog/2014/01/03/post-2094/

ご教授いただけますと幸いです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/08/19 08:45

そりゃ、できるでしょう
m.ts10806

2019/08/19 08:52

お手元のコードのインデントをきちんとつけてから質問にコードを添付しなおしてください(できればコードフォーマット機能のあるエディタを使いましょう)
kei344

2019/08/20 17:06

当質問を含め過去の質問について、「解決済」になっていないものが多数見受けられます。解決したものは「ベストアンサー」を選び、自力で解決した場合はその方法を解答欄に書き、もし万が一解決していないのであれば質問を編集するなどしてみてください。
guest

回答1

0

ベストアンサー

filterDataの何番目からアクセスするかをdisplayの引数に追加してあげれば良いと思います。
下記コードのデバッグはしていません。参考程度にお願いします。

Javascript

1//変数設定 2var $imageWrap = $("#imageWrap"); 3var alldata = []; //ここはすべてのデータを保持しておく配列 4var filterdata = []; //フィルターを掛けたデータを保持する配列 5 6//最初に読み込んだ時に発生する関数 7$.getJSON('jsonのソース', init); 8 9function init(data) { 10 //全データを保持しておく 11 alldata = data; 12 13 //とりあえず全データを代入しておく 14 filterdata = alldata; 15 16 //データを表示させる 17 display(0); 18} 19 20const MAX_DISPLAY_COUNT = 8; 21 22//画像表示させるための関数 23function display(startIndex) { 24 $imageWrap.empty(); 25 for (var i = startIndex; i < startIndex + MAX_DISPLAY_COUNT; i++) { 26 if(!filterdata[i]){ 27 return; 28 } 29 $('<div class="elm"><img src="' + filterdata[i].url + ' "></div>').appendTo($imageWrap); 30 } 31} 32 33let currentDisplayCount = 0; 34 35//ラジオボタンが変わった時にフィルタリングする関数 36$('input:radio').change(function () { 37 //チェックボタンの状況によってフィルタリングする 38 var cate = $(this).val(); 39 //フィルターの配列をいったん空っぽにする 40 filterdata = []; 41 42 if (cate === "all") {//allが選択されたら全データを保持 43 filterdata = alldata; 44 45 } else { 46 filterdata = $.grep(alldata, function (n) { 47 return n.category === cate; 48 }); 49 } 50 51 currentDisplayCount = 0; 52 display(currentDisplayCount); 53}); 54 55//もっと見るで要素を追加させたい 56$('.more-btn').click(function () { 57 currentDisplayCount += MAX_DISPLAY_COUNT; 58 display(currentDisplayCount); 59});

投稿2019/08/19 08:50

編集2019/08/19 09:00
BluOxy

総合スコア2663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ysfree14

2019/08/19 09:27

ご回答ありがとうございます。 上記の通り、コードを修正したのですが、 「もっと見る」をクリックで新しい要素は表示できたのですが、既存の表示していたものが消えてしまいます。 現状表示している下に、8個ずつ追加表示していくにはどうすれば良いのでしょうか? 何度もすいませんが、どうぞよろしくお願い致します。
BluOxy

2019/08/19 09:29

$imageWrap.empty();をフィルタリングするときだけ実行するよう修正すれば良いかと思います。
ysfree14

2019/08/20 08:33 編集

ありがとうございます。 意図した通りに動くようになりました。 フィルタリングをした場合、もし要素が8個以上なければ「もっと見る」ボタン表示しないという処理を入れたいのですが、どうすればいいでしょうか。 フィルタリングのところに下記のようなコードを入れたのですが、最初から消えてしまいます、、 $('.more-btn').show(); var counter = 0; $('jsonで読み込む要素').each(function(){  counter++;  if(counter <= 8) {   $('.more-btn').hide();  } });
BluOxy

2019/08/20 08:51

質問がまた変わってくるのでこちらは閉めて頂き、新しく質問を立てて頂ければ幸いです。 このコメント欄でそちらの質問についてのこれ以上の返信は出来かねますが、1点ぼやくとするなら下記のような修正で出来るんじゃないかと思います。 function display(startIndex) { $imageWrap.empty(); $('.more-btn').show(); for (var i = startIndex; i < startIndex + MAX_DISPLAY_COUNT; i++) { if(!filterdata[i]){ $('.more-btn').hide(); return; } $('<div class="elm"><img src="' + filterdata[i].url + ' "></div>').appendTo($imageWrap); } }
ysfree14

2019/08/23 05:10 編集

ご回答ありがとうございます。 承知しました、解決しなければ新たに質問立てさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問