前提・実現したいこと
jqueryで、特定のclass名を抽出+ページングをしたいと思っています。
例えば、下記のようなリストがある場合に、
「index.php?item=apple&page=2」
「index.php?item=apple&page=3」のような形で、
class名が「apple」のものを抽出して、そのappleだけで
ページングする、というような形にしたいのです。
今は「apple」の抽出はできますが、ページングとのからみ方が分からずできておりません。
データ総数はliの数をカウント、
1ページに表示する数は3件です。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>サンプル</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function () { var item = decodeURIComponent(location.search.match(/item=(.*?)(&|$)/)[1]); if ( item == "all" || item == "") { $("ul.list li").css("display","block"); } else { $("ul.list li." + item).siblings("li").css("display","none"); $("ul.list li." + item).css("display","block"); } }); </script> </head> <body> <p><a href="?item=all">全て</a>|<a href="?item=apple">りんご</a>|<a href="?item=lemon">レモン</a></p> <ul class="list"> <li class="apple">りんご</li> <li class="lemon">レモン</li> <li class="lemon">レモン</li> <li class="apple">りんご</li> <li class="lemon">レモン</li> <li class="lemon">レモン</li> <li class="apple">りんご</li> <li class="apple">りんご</li> <li class="lemon">レモン</li> <li class="lemon">レモン</li> <li class="apple">りんご</li> <li class="apple">りんご</li> <li class="lemon">レモン</li> <li class="lemon">レモン</li> <li class="lemon">レモン</li> </ul> <hr> ↓希望するページングの形 前へ|1|2|3|次へ </body> </html>
↓希望するページングの形
前へ|1|2|3|次へ
発生している問題・エラーメッセージ
該当のソースコード
試したこと
補足情報(FW/ツールのバージョンなど)
初歩的な質問で申し訳ありませんが、アドバイスを頂けたら嬉しいです。
どうぞよろしくお願いいたします。
データは何で管理していますか?RDB、PHP内の配列(変数)、JSON、CSV、HTML or その他
(質問文は編集できます)質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
ご指摘ありがとうございます。コードブロックを修正しました。
リストのデータはHTMLになります。
formのmethodのそれぞれについては試してみました?
htmlはデータではなくデータを表示するための手段です。どこからデータを取得させる予定ですか?
formのmethodでは試していません。
説明が分かりにくく申し訳ありません。
htmlのulタグで書かれている、質問文のようなliのリストがすでにあります。
その一覧に対して、抽出+ページングしたいと思っています。
そのリストは固定で書かれていますか?phpでループさせて書かれていますか?JavaScriptからAjaxでPHPを呼び出してデータを取得して表示されていますか?ひとえに「一覧」といっても様々な形があります。そのulのリストも含めてコードをご提示ください。場合によりGET関係なくJavaScirptだけでできることもありますし、PHPである必要がないかもしれません。というかページングしたいのであればやはり「データが何件あるか」の元になったデータがないといけないはずなので「リストと元になるデータはhtmlです」とはならないと思います。ページングのページ数を計算する元となる全データ数・1ページに表示するデータ件数 などが必要です。
リストは固定です。 質問文のulのリストの形そのままのごく普通のhtmlのulタグで書かれているリストです。 どこかからデータを取得したり出力しているわけではなく、必要に応じて手動でliを追加して記述するような形になっています。 (めったにliは追加されないため) 1ページに表示するデータ件数「3件」、 liの総データ数は「PHPでカウント」というイメージです。
htmlの個数をPHPでカウントってスクレイピングなどしない限り無理ですよ。PHPで処理した結果を表示させるのでhtmlは後で出来上がります。リスト固定ならJavaScriptだけで実現することになります。PHPで実現したいのであればデータはデータベースなど別の場所に持っているのがおおよその前提です。
ということは、javascriptでliの総数を取得しておいて、その値をphpに渡し、データ抽出+ページングをする、という流れでしょうか?
勝手にphpじゃないとできないと思いこんでいたのですが、jsだけでも全て可能なのでしょうか?
いえ、一切PHPは介在しません。「その値をPHPに渡し」をしてもあまり意味がないですね。そのタイミングだとAjaxでしかPHPに情報渡せませんが、ページングの計算だけならJavaScriptだけでできます。
そうだったのですね・・・ご指摘ありがとうございます!質問ばかりで恐縮ですが、javascriptでの記述をアドバイス頂けないでしょうか?
jqueryで「apple」だけの抽出はできますが、ページングの方ができず困っております。
ひとまず現在のコードを追記いただけますか?あと要件が「PHPではなくなっている」ので質問内容を調整してください。※整理すために一度クローズしてもよいです
どうもありがとうございます。質問内容を変更してコードをアップさせて頂きますので少々お待ちください。
質問とコードを修正しました。どうぞよろしくお願いいたします。
これなんですが、画面遷移を伴わない形でも問題ないですか?それとも必ずQuery文字列使う仕様ですか?
画面遷移は伴わなくても大丈夫です。「?item=apple」の形は必須ですが、「&page=2」の文字列は必須ではないです。ページングさえできれば問題ないです。
んー。どっちかに統一しないと作りが煩雑になるんですよね。リスト固定でJavaScriptのみで行うのでしたらquery文字列利用はあまりメリットがないですね。data属性に値セットして取得するだけにするとか、そのような作りを想定していました
すみません。私の知識不足で余計にややこしくしてしまっているかもしれません。jquery文字列も不要にします。data属性に値セットで良いので、mts10806様の良いと思われるやり方でアドバイスをお願いできないでしょうか?お手数お掛けして申し訳ありません。
「appleの一覧を抽出できる」「抽出した一覧でページングできる」この2点だけクリアできればどのようなやり方でも大丈夫ですので、アドバイス頂けたら嬉しいです。どうぞよろしくお願いいたします。
細かいですがjquery文字列ではなくQuery文字列です。クエリストリングですね。ちょっと調整してみますので少々お待ちを(たぶんそれなりのコード量になります)
「jquery文字列」ご指摘ありがとうございます!お恥ずかしい。。コードの件、どうぞよろしくお願いいたします。
回答しました。後学のために注意いただきたいのですが「初歩的なこと」というのはあまり含めないほうが良いです。「そう判断できるんなら自分で解決できるんでは?」と疑問に持たれることもありますし、基本的に初歩的かどうか判断するのは自身ではなく周囲です。(もちろん「こんな初歩的なこともわからないのか」のような態度で接する回答者はほとんどいませんが)
「初歩的なこと」確かにそうですね!今後、質問をする際の参考にさせて頂きます。いろいろとご指導ありがとうございます!
回答1件
あなたの回答
tips
プレビュー