• 締切済み

JavaScriptでページャーのデザイン変更

ページャーをのデザインをJavaScriptで変更しようとしております。 現在ページャーは 「前へ  1 2 3 4 5 6  次へ」 という形のものです。これを 「前へ  1/6  次へ」 というデザインに変更したいのですが、ソースはシステムからはき出されるものが固定なので変更ができません。そのためJavaScriptで変更しようと考えております。 はき出されるソースは <div class="pagenav"> <a href="#">前へ</a> <span class="number"> <a href="#">1</a> <a href="#" class="current">2</a> <a href="#">3</a> <a href="#">4</a> <a href="#">5</a> <a href="#">6</a> </span> <a href="#">次へ</a> </div> という感じのものです。今いるページにはclassが付きます。 これに対してjQueryで、 $(function(){ var now = $('.pagenav .number a.current').text(); var full = $('.pagenav .number a:last-child').text(); $('.number').append(now + '/' + full); $('.number > a').remove(); }); という風に記述したところ、無事に希望とする形のページャーに変更ができました。 しかし問題が1つ発生し、ページ内に複数のページャー(ページの上部と下部など)があった場合に両方の数値を取得してしまい、 「前へ 22/66 次へ」 というような表示になってしまいました… 1つの括り(<div class="pagenav">)で処理を完結し、同じclass名の要素が複数あっても干渉しないようにする記述方法を教えてください。 よろしくお願いします。

みんなの回答

  • gorusura
  • ベストアンサー率59% (25/42)
回答No.1

$(function(){ $('.pagenav').each(function(){ var number = this.children('.number') , children = number.children('a'); var now = children.filter('.current').text(); var full = children.filter(':last-child').text(); number.empty().append(now + '/' + full); }); }); こういう感じでしょうか。 尚、無駄なことは避けて下さい。 .pagenav .number a.current → .pagenav > .number > a.current .pagenav .number a:last-child → .pagenav > .number > a:last-child .pagenav .number aが 二か所に出てきた → 変数に入れる $('.number').append(now + '/' + full); $('.number > a').remove(); → $('.number').empty().append(now + '/' + full);

webdesigningkai
質問者

お礼

回答ありがとうございます! なにぶんjQurtyを使いこなせていないので、childrenやfilterのそういう使い方は知りませんでした。勉強になります。 ただ、ソースを貼り付けてみてもページャーに変化が見られず、firebugではエラーが出ているようです…

関連するQ&A

  • 簡潔なJavaScriptで実現したい

    次のような、btnToggleというクラス名のdivタグがいくつかあるHTMLで、 それぞれクリックするとそれぞれの「開く/閉じる」が反転するという動きをさせたいです。 <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>AAA</div> </div> <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>BBB</div> </div> <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>CCC</div> </div>    : <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>XXX</div> </div> 下記のようなJavaScriptで実行してみたのですが、 いくつかのdivタグをそれぞれクリックすると、flgの値と現在の状態が入れ替わってしまいます。 クラス名が同じで、flgも一つの変数なので当たり前なのですが… <script type="text/javascript"> $(document).ready(function(){ var flg = "close"; $(".btnToggle").click(function(){ if(flg == "close"){ $(this).html("<span>-</span>閉じる"); flg = "open"; }else{ $(this).html("<span>+</span>開く"); flg = "close"; } }); }); </script> 私が考えられることは、classではなく、idで「btnToggle1」「btnToggle2」「btnToggle3」…などと定義し、 JavaScriptのプログラムを次のように書くしか思いつかないのですが、 これでは、我ながら間抜けなプログラムだなと思いました。 <script type="text/javascript"> $(document).ready(function(){ var flg1 = "close"; $(".btnToggle1").click(function(){ if(flg1 == "close"){ $(this).html("<span>-</span>閉じる"); flg1 = "open"; }else{ $(this).html("<span>+</span>開く"); flg1 = "close"; } }); var flg2 = "close"; $(".btnToggle2").click(function(){ if(flg2 == "close"){ $(this).html("<span>-</span>閉じる"); flg2 = "open"; }else{ $(this).html("<span>+</span>開く"); flg2 = "close"; } }); var flg3 = "close"; $(".btnToggle3").click(function(){ if(flg3 == "close"){ $(this).html("<span>-</span>閉じる"); flg3 = "open"; }else{ $(this).html("<span>+</span>開く"); flg3 = "close"; } });        :        : }); </script> 配列などを使えばもっと簡潔になるのでしょうか。 どうか教えてくださいますようお願い申し上げます。

  • タグを切り替えるJavaScriptについて

    下記のurlを参考にして、タグを切り替えるJavaScriptを使いレイアウトをしています。 http://archiva.jp/web/javascript/tab-menu.html やりたいことは各内容をIDセレクタでくくりたいのです。 <div id="page1">  <h2>page1</h2>  <p>パンクズ</p>  <div class="nav">   <ul id="tab">    <li><a href="#page1"><span>page1を選択中</span></a></li>    <li><a href="#page2"><span>page2</span></a></li>    <li><a href="#page3"><span>pave3</span></a></li>   </ul>  </div>  <p>段落1</p> </div> <div id="page2">  <h2>page2</h2>  <p>パンクズ</p>  <div class="nav">   <ul id="tab2">    <li><a href="#page1"><span>page1</span></a></li>    <li><a href="#page2"><span>page2を選択中</span></a></li>    <li><a href="#page3"><span>pave3</span></a></li>   </ul>  </div>  <p>段落1</p> </div> ...page3 このようにやりたいのですが、JavaScriptがIDセレクタの"tab"にしか対応していないため、他のページにいくとクリックが効かなくなってしまいます。 idセレクタをclassセレクタに設定し直してもidセレクタにしか対応していないため効きません。 tag2とtab3に対応させるためにはどのようにすればいいでしょうか。 よろしくお願いします。

  • PEAR::Pagerにアンカーリンクを設定したい

    便利にPEAR::Pager を利用していますが アンカーリンクの利用方法(設定方法)が分かりません。 調べてみると、それを書いているページもあるのですが、 知識の無さから、意味が分かりません。。。。 パラメーターに 「'fileName'  => 'test_.php#top2',」 と設定するのかななど考えてやってみましたが、何も変化はありません。 現在 以下のように設定しています。 **GETで色々なクエリは引き継いでいますが、それはうまく行っています。 色々なクエリの後に、アンカー[#top2] はどのように設定したらよいでしょうか。 よろしくお願いいたします。 $params = array( 'mode' => 'sliding', 'perPage' => 10, 'delta' => 5, 'separator' => '', 'curPageSpanPre' => '<span class="current">', 'curPageSpanPost' => '</span>', 'prevImg' => '< 前へ', 'nextImg' => '次へ >', 'spacesBeforeSeparator' => 0, 'spacesAfterSeparator' => 0, 'totalItems' => $tcnt, 'altFirst' => '1ページ目へ', 'altPrev' => '前のページへ', 'altNext' => '次のページへ', 'altLast' => '最後のページへ', ); $_GET = $_REQUEST; $pager =& Pager::factory($params); $links = $pager->getLinks();

    • ベストアンサー
    • PHP
  • JavascriptでHTMLを書き換えたいのです

    うまく動作しないJavascriptなのですが、こういった方法は可能なのでしょうか? お分かりになりましたらご教授お願いします。 -------------------- ■html <div class="orenge1"></div> オレンジ1です<br> <div class="orenge2"></div> オレンジ2です<br> <div class="orenge3"></div> オレンジ3です<br> -------------------- ■Javascript 記述は最下部の</body>直前です。 <script type="text/javascript"> window.onload = function() { document.getElementsByClassName("orange1").innerHTML = ('<a href="./item/?item=orange1">商品はコチラ</a>'); document.getElementsByClassName("orange2").innerHTML = ('<a href="./item/?item=orange2">商品はコチラ</a>'); document.getElementsByClassName("orange3").innerHTML = ('<a href="./item/?item=orange3">商品はコチラ</a>'); } </script> -------------------- ■やりたい事 <div class="orenge1"></div> の部分に <a href="./item/?item=orange1">商品はコチラ</a> を表示したいと思っています。 同一ページに複数回表れる場合もあります。 よろしくお願い致します。

  • .innerHTMLの不一致?

    こんにちは。 Javascriptは全くの初心者です。 よろしくお願いします。 <div id="test"> <ul> <li><a href="a.html"><span>AAA</span></a></li> <li><a href="b.html"><span>BBB</span></a></li> <li><a href="c.html"><span>CCC</span></a></li> </ul> </div> <script type="text/javascript"> <!-- var data = "AAA";// AAAは自動取得させる予定 var nodes = document.getElementById('test').getElementsByTagName("a"); for (i = 0; i < nodes.length; i++) { if(nodes[i].innerHTML == data){ nodes[i].setAttribute("class","ddd"); } } //--> </script> 上記のようなjavascriptを設置し、 <li><a href="a.html"><span>AAA</span></a></li> の<a>にclass="ddd"を適用させようと思います。 (<span>には適用させたくない。) しかし、 var data = "AAA"; だと<a>の.innerHTMLは<span>AAA</span>なので <span>AAA</span> ≠ AAA で一致しません。 そこで、 var data = "<span>AAA</span>"; としたところ、FirefoxとNNでは成功しましたが、それ以外のブラウザでは駄目でした。 初心者でお恥ずかしい限りですが、 どうしたらよいのかご教授いただければ幸いです。 よろしくお願いします。

  • JavaScriptを使ってアンカーリンクでテキストを変更したい。

    JavaScriptを使ってアンカーリンクでテキストを変更したい。 JavaScriptを使ってアンカーリンクでテキストを変更したいのですがうまくいかず困っています。 A B C  <div class="A"> ○○○○○ ○○○○○ ← A群 ○○○○○ </div> Bのアンカーリンクを押したら A B C  <div class="B"> □□□□□ □□□□□ ← B群 □□□□□ </div> Cのアンカーリンクを押したら A B C  <div class="C"> △△△△△ △△△△△ ← C群 △△△△△ </div> というように同じページ内の同じ場所にcssのdisplay(none⇔block)で表示を入れ替えるようなスクリプトが書きたいのですがわかりません。 参考URLだけでもいいので宜しくお願いいたします。

  • javascriptで同じ動作を増やしたい時

    初心者で用語等の知識が不十分なため、伝わりにくいことがありますので、ご了承下さい。 javascriptで、下記のようなシステムを使用しているのですが、 同じシステム(PHP部)を同一ページに使用したい場合、 どのようにjavascript部を応用すれば良いのでしょうか。 PHP部: <div id="rating"> <pre> <ul class="star-rating"> <li class="current-rating" id="current-rating" style="width: <?php $ratingpx = $rating *25; echo $ratingpx;?>px"><!?Currently <? echo $rating ?>/5 Stars.></li> <li><a href="javascript:rateImg(1,'hyouka')" title="1 star out of 5" class="one-star">1</a></li> <li><a href="javascript:rateImg(2,'hyouka')" title="2 stars out of 5" class="two-stars">2</a></li> <li><a href="javascript:rateImg(3,'hyouka')" title="3 stars out of 5" class="three-stars">3</a></li> <li><a href="javascript:rateImg(4,'hyouka')" title="4 stars out of 5" class="four-stars">4</a></li> <li><a href="javascript:rateImg(5,'hyouka')" title="5 stars out of 5" class="five-stars">5</a></li> </ul> </pre> </div> javascript部(この部分かと思うのですが): function rateImg(rating,imgId) { remotos = new datosServidor; nt = remotos.enviar('update.php?rating='+rating+'&imgId='+imgId); rating = (rating * 25) - 8; document.getElementById('current-rating').style.width = rating+'px'; document.getElementById('ratingtext').innerHTML = 'Thank you!'; } ヒントでもかまいません、どうかご教授お願い致します。

  • デザイン変更後、突如、Googleで検索圏外になってしまいました。

    デザイン変更後、突如、Googleで検索圏外になってしまいました。 ブログを見やすくしようと、4日ほど前に HTMLをいじりデザインを変更しましたところ 突如、Googleで検索圏外になってしまいました。 今までは、タイトルに含まれるキーワードや記事タグで 検索をかければ、大抵、1ページ目か2ページ目に 表示してもらえていたので、 アクセスも順調に伸びていた所だったのですが このようなことになり、訪問者が一気に1/5になってしまいました。 Googleのフレッシュクローラーにも嫌われたのか その日を境に、新たに記事を投稿してpingを送っても 巡回にきてくれる様子がまったくありません。 どこをいじってしまったかといいますと・・・ 【変更前】 <% if:with_date %> <h2 class="date"> <% article.createstamp | date_format("%Y年%m月%d日") %> </h2> <% /if %> <div class="blogbody"> <h3 class="title"> <a href="<% article.page_url %>" class="title"> <% article.subject %></a> </h3> <div class="posted"> posted by <% article.nickname %> at <% article.createstamp | date_format("%H:%M") -%> 【変更後】 <h2 class="date"> <span style="color:#FF6500">☆&nbsp;</span> <a href="<% article.page_url %>" class="title"> <% article.subject %></a> </h2> //<% if:with_date %><% /if %>と、date_formatを削除  <h3 class="title"></h3>で囲われてたタグを  <h2 class="date"></h2>内に移動  titileの前に☆の装飾を追加// <div class="blogbody"> //<h3 class="title"></h3>は削除// <div class="posted"> posted by <% article.createstamp | date_format("%Y年%m月%d日%H:%M") -%> //<% article.nickname %> at を削除  ("%H:%M")を("%Y年%m月%d日%H:%M")に変更// この様な大雑把な変更だったのですが 重要な部分をいじってしまったのでしょうか? ちなみにSeeSaaブログを利用しています。 寝る前に変更して、翌朝には異変(極端に訪問が少ない)に 気づき、あわてて元に戻して様子をみていたのですが、 状況はいまだ変わりません。 どう対処したら良いのか途方に暮れております。 どなたかアドバイス、宜しくお願いします。

  • JavaScriptの記述を教えて下さい。

    はじめまして、charliehamaといいます。 素人なもので、JavaScriptに詳しい方、教えて下さい。 次のコード(全体の中の一部)があります。 <!-- // ------------------------------------------------- // HTML生成関数 // ------------------------------------------------- function disp(){ //各要素を変数に格納 var $day = $(this).find('day').text(); var $label = $(this).find('label').text(); var $category = $(this).find('category').text(); var $content = $(this).find('content').text(); var $url = $(this).find('url').text(); var $target = $(this).find('target').text(); //HTMLを生成 $('<tr>'+ '<th>'+$day+'</th>'+ '<td class="label"><span class="'+$label+'">'+$category+'</span></td>'+ '<td><a href="'+$url+'" target="'+$target+'">'+$content+'</a></td>'+ '</tr>').appendTo('table.tbl tbody'); } --> 変数$urlについて、if構文で分岐させるにはどのように記述すればよいですか? (1) $urlがxxxの時、<td><span class="abc">'+$content+'</span></td> とする。 (2) $urlがそれ以外の時、<td><a href="'+$url+'" target="'+$target+'">'+$content+'</a></td>とする。 (3) (1)と(2)以外の処理は変更しない。 質問の仕方が悪ければご指摘下さい。 困っています。 どうかよろしくお願い申し上げます。

  • Wordpressでのphp(投稿ナビを非表示に)

    WordpressでWebサイトを制作中です。 トップページに最新の投稿が表示できるようにしたのですが、その下に自動的に挿入されるページナンバー(次のページへの遷移)が動作しません。 (画像の、1,2,3、、、、13 のナンバーの部分です) 恐らく、Wordpressの「投稿」ページではなく、固定ページであるトップページにこの機能を組み込んだためかと思うのですが、特にページナンバーを表示させる必要がないため、ページナンバーだけを削除あるいは非表示にしたいのですが、phpの該当部分を削除すればいいのでしょうか? phpの知識がないために、お教えください。 Wordpressのファイル「page-home.php」の中に記述されてある中で、恐らく該当部分は以下かと思うのですが、この中で、どの部分を削除すればいいのでしょうか? 部分的に何度か削除してアップロードして試してみたのですが、不思議なことに、どの部分を削除しても、ページナンバーは消えません。 --------------------------------------------------- <!--LATEST POSTS--> <?php if(of_get_option('latstpst_checkbox') == "1"){ ?> <?php $args = array( 'post_type' => 'post', 'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1)); query_posts($args); ?> <?php get_template_part(''.$zn_lays = of_get_option('layout_images', 'layout1').''); ?> <?php } else { ?> <?php } ?> <!--LATEST POSTS END--> -------------------------------------------------------- ちなみに、Wordpressは最新のバージョン 4.9.5–ja、 テンプレートの「Ttheron_lite」を利用しています。 情報として不足部分がありましたら、申し訳ありません。 ご指摘くださいましたら、情報を追加いたします。 なお、ブラウザに表示後にHTMLソースから、ナンバー部分に相当しそうな 部分のクラスに対して、 display: none; をstyle.cssに記述することも試してみたのですが、 やはり表示は消えません。 参考:http://evm-label.com/2015/05/wp_postnavi_hide01/ HTMLソースでは、この部分のようです。 <div class="thn_paginate"><span class='amp_title'>Pages:</span><a href='...../wp/' class='amp_page amp_current'>1</a><a href='...../wp/page/2/' class='amp_page'>2</a><a href='...../wp/page/3/' class='amp_page'>3</a><a href='...../wp/page/4/' class='amp_page'>4</a><a href='...../wp/page/5/' class='amp_page'>5</a><a href='...../wp/page/6/' class='amp_page'>6</a><a href='...../wp/page/7/' class='amp_page'>7</a><span class='amp_gap'>...</span><a href='...../wp/page/13/' class='amp_page'>13</a><a href='...../wp/page/2/' class='amp_next'>&raquo;</a></div> <div class="hidden_nav"></div> リンクのURL部分は、サイト公開前のために、伏せています(問題ありますでしょうか?) よろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう