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

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

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

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

jQuery

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

Q&A

1回答

363閲覧

楽天ブックスAPIを使用した検索アプリ

1103_na

総合スコア0

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2022/10/28 02:45

編集2022/10/28 03:06

前提

楽天ブックスAPIの検索エンジンを作成しております。
現在、下記コードにて処理はできているのですが、よりシンプルなコードにしたく質問させていただきました。

※キーワードを入力し、検索をすると20件表示され同じキーワードのまま再度ボタンを押すと追加で検索結果が20件表示されるようになっています。(2回同じキーワードを押すと合計40件になるような仕組み)
それに加え、新たなキーワードを入力すると前回まで検索していた内容は削除され、新しいキーワードの検索結果のみ実装されるようになっております。

初めての質問なので至らぬ点が多々あるかと思いますが、ご教授よろしくお願い致します。

実現したいこと

・else ifを削除して前提※印部分のような実装をしたい。

発生している問題・エラーメッセージ

発生している問題:else ifを削除すると前提※印部分のように実装ができなくなる。

JavaScript/jQuery

1<body> 2<div class="wrap"> 3 <div class="container"> 4 <div class="header"> 5 <p class="header__title">Search Books!</p> 6 </div> 7 <div class="search"> 8 <div class="search__text"> 9 <input type="text" id="js-search-word" class="search__text__input" value="" placeholder="検索する"> 10 </div> 11 <button id="js-search-button" class="search__btn">検索する</button> 12 </div> 13 <ul class="lists"></ul> 14 </div> 15</div> 16<script defer> 17window.addEventListener( 'load' , function(){ 18 19 $(function(){ 20 let page = 0, 21 beforeKeyword; 22 23 $('#js-search-button').on('click',function(){ 24 afterKeyword = $('#js-search-word').val(); 25 page = page + 1; 26 27 $.ajax({ 28 url: 'https://app.rakuten.co.jp/services/api/BooksTotal/Search/20130522', 29 type : 'GET', 30 datatype: 'json', 31 data: { 32 applicationId: '1019399324990976605', 33 booksGenreId: '001', 34 keyword: afterKeyword, 35 hits: '20', 36 page: page, 37 } 38 }).done(function(data){ 39 if (data.count == 0){ 40 $("ul").empty(); 41 const message = $( 42 "<li>" + 43 "<div class='message'>" + 44 "<p>検索結果が見つかりませんでした。</p>" + 45 "<p>別のキーワードで検索して下さい。</p>" + 46 "</div>" + 47 "</li>"); 48 $("ul").prepend(message); 49 } else if (beforeKeyword == afterKeyword){ 50 $.each(data.Items,function(i,item){ 51 const list = $( 52 "<li class='lists__item'>" + 53 "<div class='lists__item__inner'>" + 54 "<a href='" + item.Item.itemUrl + "'class='lists__item__link' target='_blank'>" + 55 "<img src='" + item.Item.largeImageUrl + "' class='lists__item__img' alt>" + 56 "<p class='lists__item__detail'>作品名:" + item.Item.title + "</p>" + 57 "<p class='lists__item__detail'>作者:" + item.Item.author + "</p>" + 58 "<p class='lists__item__detail'>出版社:" + item.Item.publisherName + "</p>" + 59 "</a>" + 60 "</div>" + 61 "</li>"); 62 $('ul').prepend(list); 63 }); 64 } else if (beforeKeyword!= afterKeyword) { 65 page = 0; 66 $(".coment").empty(); 67 $("ul").empty(); 68 $.each(data.Items,function(i,item){ 69 const list = $( 70 "<li class='lists__item'>" + 71 "<div class='lists__item__inner'>" + 72 "<a href='" + item.Item.itemUrl + "'class='lists__item__link' target='_blank'>" + 73 "<img src='" + item.Item.largeImageUrl + "' class='lists__item__img' alt>" + 74 "<p class='lists__item__detail'>作品名:" + item.Item.title + "</p>" + 75 "<p class='lists__item__detail'>作者:" + item.Item.author + "</p>" + 76 "<p class='lists__item__detail'>出版社:" + item.Item.publisherName + "</p>" + 77 "</a>" + 78 "</div>" + 79 "</li>"); 80 $('ul').prepend(list); 81 beforeKeyword = afterKeyword; 82 page = 1; 83 }); 84 } 85 }); 86 }); 87 }); 88}); 89</script> 90</body>

試したこと

このようなパターンも作成しましたが、else ifがどうしても必要でした。
window.addEventListener( 'load', function(){

$(function(){ let page = 0,beforeKeyword; $('#js-search-button').on('click',function(){ const keyword = $('#js-search-word').val(); page = page + 1; $.ajax({ url: 'https://app.rakuten.co.jp/services/api/BooksTotal/Search/20130522', type: 'GET', datatype: 'json', data: { applicationId: '1019399324990976605', booksGenreId: '001', keyword: keyword, hits: '20', page : page, } }).done(function(data){ if (data.count == 0){ $('.jsc-lists').empty(); const message = $( "<li>" + "<div class='message'>" + "<p>検索結果が見つかりませんでした。</p>" + "</div>" + "</li>"); $(".jsc-lists").prepend(message); } else if(beforeKeyword !== keyword){ pageNum = 1; $(".jsc-lists").empty(); prevWord = keyword; }; $.each(data.Items,function(i,item){ const $list = $( "<li class='lists__item'>" + "<div class='lists__item__inner'>" + "<a href='" + item.Item.itemUrl + "'class='lists__item__link' target='_blank'>" + "<img src='" + item.Item.largeImageUrl + "' class='lists__item__img' alt>" + "<p class='lists__item__detail'>作品名:" + item.Item.title + "</p>" + "<p class='lists__item__detail'>作者:" + item.Item.author + "</p>" + "<p class='lists__item__detail'>出版社:" + item.Item.publisherName + "</p>" + "</a>" + "</div>" + "</li>"); $('.jsc-lists').prepend($list); beforeKeyword=keyword; }); }); });

});
}, false);

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

else if(beforeKeyword !== keyword){

試したパターンからelseifを除くと良いかもしれません。
試したパターンだと、検索がヒットするものを検索した後、検索にヒットしないものを検索した場合に、前回の検索結果が残る挙動になると思います。
実際に試していないで、それを変更しても他のところに問題があるかもしれないですが。

投稿2022/10/28 23:50

yshima1129

総合スコア179

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問