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

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

新規登録して質問してみよう
ただいま回答率
85.35%
ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1903閲覧

liタグを複数回追加しても、最後のliタグしか追加されない

samepanda

総合スコア14

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/12/16 12:07

現在、JavaScriptのみでページネーションを作成しています。
問題は、liタグを作成する変数liを定義しappendChild('li')によってブラウザに表示させたいのですが、最後の要素のみ追加されてしまうということです。
初学者ゆえ初歩的な質問かもしれませんが、わかる方がいたらご教授お願いいたします。

---以下コード---

html

1<p class="title">Menu</p> 2 <ul id="page_count"></ul> 3 <ul id="contents"></ul> 4 <ul class="pagination"> 5 <li id="prev">&lt;</li> 6 <li>1</li> 7 <li>2</li> 8 <li>3</li> 9 <li id="next">&gt;</li> 10 </ul>

css

1body { 2 font-size: 50px; 3 text-align: center; 4 margin: 0 auto; 5} 6 7.pagination { 8 display: flex; 9} 10 11li { 12 list-style: none; 13 margin-left: 5px; 14 margin: 0 auto; 15} 16 17.title { 18 font-size: 70px; 19}

js

1const items = [ 2 {"id": 1, "name": "salad"}, 3 {"id": 2, "name": "olive_oil"}, 4 {"id": 3, "name": "vinegar"}, 5 {"id": 4, "name": "sesami"}, 6 {"id": 5, "name": "chicken_soup"}, 7 {"id": 6, "name": "flour"}, 8 {"id": 7, "name": "sesami"}, 9 {"id": 8, "name": "salt"}, 10 {"id": 9, "name": "pepper"}, 11 {"id": 10, "name": "coffee"}, 12 {"id": 11, "name": "short_cake"}, 13 {"id": 12, "name": "cheese_cake"}, 14 {"id": 13, "name": "pudding"}, 15 {"id": 14, "name": "pafe"}, 16 {"id": 15, "name": "apple_pie"}, 17 {"id": 16, "name": "humberger"}, 18 {"id": 17, "name": "chocolate"}, 19 {"id": 18, "name": "fruit"}, 20 ]; 21 22 23 const pagination = () => { 24 let li = document.createElement('li'); 25 const page_count = document.getElementById('page_count'); 26 const contents = document.getElementById('contents'); 27 let current_list = 0; 28 const step = 5; 29 const pages = Math.ceil(items.length/5); 30 31     //ページ・コンテンツ数 <== ここも無視されてしまう 32 page_count.appendChild(li).innerHTML = (current_list + 1) + "/" + pages + " " + "page" + "コンテンツ数: " + step; 33 34 35 const viewItems = value => { 36 for (let i = 0; i < value.length; i++) { 37 // console.log(value[i].name); <==ここではすべてのnameが取得できている 38 contents.appendChild(li).innerHTML = value[i].name; 39 } 40 } 41 42 viewItems(items); 43 //ここでitemsのfruitのみ表示される 44 45 // contents.appendChild(li).innerHTML = viewItems(items); 46 } 47 48 window.onload = () => { 49 pagination(); 50 }

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

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

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

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

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

guest

回答3

0

document.createElementを1回しか行っていないので、作ったノードは1つだけです。
そのノードを(innerHTMLを上書きしながら)あちこちに移動させているだけなので、最後にappendChildした位置に残ります。

追加したい数だけノードを作りましょう。

投稿2020/12/16 12:12

編集2020/12/16 12:15
otn

総合スコア85901

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

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

samepanda

2020/12/16 12:51

ご回答ありがとうございます。 document.createElementを一回定義したら、複数回使用することができると間違った理解をしていました。 liタグを作成する関数を作る、または様々なところでdocument.createElementを記述するなどする必要があるのですね。 ありがとうございました。
guest

0

ベストアンサー

liは1個しか作っていないので、何度も同じliappendChildしても、それは追加ではなく移動になってしまいます。

追加したい数だけdocument.createElementを行うなど、やり方を変える必要があります。

投稿2020/12/16 12:10

maisumakun

総合スコア146018

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

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

maisumakun

2020/12/16 12:13 編集

あと、<li>の中身としてHTMLタグがないのであれば、innerHTMLではなくtextContentを使いましょう。
samepanda

2020/12/16 12:44

ご回答ありがとうございます。 viewItems内にliを作成した結果、予期通りに表示されました。 確かに、liは一つしか作っていなかったですね。。。 ベストアンサーにさせていただきます。 改めてありがとうございました。
guest

0

viewItems内のfor文にliタグを作成する変数を入れることによって、無事表示されました。

js

1const viewItems = value => { 2 for (let i = 0; i < value.length; i++) { 3 contents.appendChild(li2).innerHTML = value[i].name; 4 } 5 } 6

js

1const viewItems = value => { 2 for (let i = 0; i < value.length; i++) { 3 let new_li = document.createElement('li'); 4 contents.appendChild(new_li).innerHTML = value[i].name; 5 } 6 } 7

投稿2020/12/16 12:37

samepanda

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問