• 締切済み

jQueryで6行表示のループ

大雑把な質問なのですが、自分でもわかっているのですが、 もっと簡単なやり方がないものかと色々とやっていたのですが、 ありませんでしょうか? $(document).ready(function() { var nCnt2 = 1; var nMax2 = 6; if(nMax2 < $('ul#portfolio li').length) { $('ul#portfolio li').hide('fast').addClass('hidden'); $('ul#portfolio li.hidden').hide('fast').addClass('hidden'); $('ul#portfolio li.hidden').each(function() { if(nCnt2 <= nMax2) { $(this).fadeIn('slow').removeClass('hidden'); } nCnt2++; }); } $('ul#navi a').click(function() { $(this).css('outline','none'); $('ul#navi .all').removeClass('current'); $(this).parent().addClass('current'); var filterVal = $(this).text().toLowerCase().replace(' ','-'); var nCnt = 1; var nMax = 6; if(filterVal == 'all') { $('ul#portfolio li').hide('fast').addClass('hidden'); $('ul#portfolio li.hidden').hide('fast').addClass('hidden'); $('ul#portfolio li.hidden').each(function() { if(nCnt <= nMax) { $(this).fadeIn('slow').removeClass('hidden'); } nCnt++; }); } else { $('ul#portfolio li').hide('fast').addClass('hidden'); $('ul#portfolio li').each(function() { if(!$(this).hasClass(filterVal)) { $(this).fadeOut('normal').addClass('hidden'); } else if (nCnt <= nMax) { $(this).fadeIn('slow').removeClass('hidden'); nCnt++; } }); } return false; }); });

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#1です。 #2の補足をみましたが、意味がつかめません。 >情報が増えた時に一覧っといったものを表示したいなっと思っています ご提示のタブの「すべて」というのと「一覧」は違うのでしょうか? 普通に考えると同じもののようにも思えますが? >各タブの一覧は別のリンク先を指定したいのですが 各タブに「一覧」があるということは、通常時は表示する内容の項目数を最新から○○個とかに固定しておいて、「一覧」をクリックすると過去の分が全部表示されるというイメージでしょうか? その「一覧」を表示するソースが別のhtmlファイルで用意されているとするならば、普通に  <a href~>一覧</a> のようなリンクを設定しておけばOKではないのでしょうか。 あるいは、それをページ遷移なしでやりたいという意味なのでしょうか? その場合は、  1)最初に全部読み込んでおいて、○○個以降は非表示にしておく   一覧をクリックしたらその部分も表示する それではページが重くなるというのであれば、  2)ajaxを利用して一覧の内容を追加で読み込む などの方法が考えられます。 (テキストだけなら、大して重くはならないと思いますが) ただし、2)の場合は、スクリプトだけではなくサーバサイドのプログラム(cgiやphpなど)が必要となります。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

#1です。 うっかりしました。 ご質問はhide()ではなくfadeOut()でしたね。 見た目には大して変わりはありませんけれど、一応、違うので… あと、*のセレクタは省略してしまったほうが無駄がないかも。(jQueryの中身を見てないので不明) 修正しておいてください。

owo0223
質問者

補足

ご回答ありがとうございます。 もう一点ご質問追加したいのです。 スクリプトの動きの中で、タブ表示になっているのですが。 今現在タブ表示を4つ程表示しています。 |すべて|デザイン|イラスト|写真| ------------------------------ |01/30 写真   公開しました。 |01/30 イラスト  公開しました。 |01/30 デザイン 公開しました。 |01/30 イラスト 公開しました。 |01/30 デザイン 公開しました。 |01/30 デザイン 公開しました。 ------------------------------ 各タブで表示していているのですが、情報が増えた時に 一覧っといったものを表示したいなっと思っています。 |すべて|デザイン|イラスト|写真| ------------------------------ |01/30 写真   公開しました。 |01/30 イラスト  公開しました。 |01/30 デザイン 公開しました。 |01/30 イラスト 公開しました。 |01/30 デザイン 公開しました。 |01/30 デザイン 公開しました。 | |                  一覧 ------------------------------ 各タブの一覧は別のリンク先を指定したいのですが、 そういったのはどのように表示させれば良いのでしょうか。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

ありゃ、そういうことだったのね。 >もっと簡単なやり方がないものかと色々とやっていたのですが、 >ありませんでしょうか? 記述を簡単にしたいという意味でしょうか? それなら、同じようなことを何度も記述せずに、必要最小限にすれば簡単になるでしょう。 例えば、「一旦全部を非表示にして、必要なものだけ表示する」といった具合。 あとはセレクタを工夫して使うことと、同じ要素のセレクトを何度も記述するよりはメソッドチェーンを利用した方が簡単だし、処理効率も上がるはずです。 前の質問でクラスは関係なさそうだったので、クラスの操作を省いていますが例えばこんなのでは? $(function(){ var max = 6; /*最大表示数*/ var mx = ':lt(' + max + ')', pf = $('#portfolio li'); pf.filter(':not(' + mx + ')').hide(); $('#navi a').click(function(){ var filterVal = '.' + $(this).text().toLowerCase().replace(' ', '-'); if(filterVal=='.all') filterVal = '*'; pf.filter(':visible').hide('fast', function(){ pf.filter(filterVal + mx).fadeIn('slow'); }); }); }); クラスの操作を行なう場合も、必要な要素がセレクトされたところでaddClass()やremoveClass()を挿入するだけでできるはずです。

関連するQ&A

  • jQueryで記事を6列表示にしたいのです。

    jQueryで記事を6列表示にしたいのです。 jQueryで6列表示をしたいと思って試行錯誤をしていたのですが、 全くわからずじまいで、どうしたらいいのかと知恵袋に投稿致しました。 各カテゴリごとに表示をするようになっているのですが、 オールだけ全て表示になります。 5つ残して表示させればいいのですが、各カテゴリが 消えてしまうので、どうしてもオールは6行表示させたいと思っています。 どなたか助けていただけませんでしょうか? jQuery ---------------------------------------------- $(document).ready(function() { $('ul#navi a').click(function() { $(this).css('outline','none'); $('ul#navi .all').removeClass('current'); $(this).parent().addClass('current'); var filterVal = $(this).text().toLowerCase().replace(' ','-'); if(filterVal == 'all') { $('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden'); } else { $('ul#portfolio li').each(function() { if(!$(this).hasClass(filterVal)) { $(this).fadeOut('normal').addClass('hidden'); } else { $(this).fadeIn('slow').removeClass('hidden'); } }); } return false; }); }); HTML ---------------------------------------------- <ul id="navi"> <li class="all"><a href="#">All</a></li> <li><a href="#">CMS</a></li> <li><a href="#">CSS</a></li> <li><a href="#">Javascript</a></li> </ul> <ul id="portfolio"> <li class="cms"><a href="#">Movable Type</a></li> <li class="cms"><a href="#">Movable Type</a></li> <li class="cms"><a href="#">Movable Type</a></li> <li class="css"><a href="#">CSSテンプレート</a></li> <li class="javascript"><a href="#">prototype</a></li> <li class="css"><a href="#">CSSビギナー</a></li> <li class="css"><a href="#">CSSテンプレート</a></li> <li class="css"><a href="#">CSSテンプレート</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">plugin</a></li> </ul>

  • jQueryで画像を表示しようとすると表示しない

    textに画像を指定したのですが、そのままタグが表示されてしまい画像が表示されません。 色々いじってみたものの表示されなかったりして、どうしたらいいのかわかりません。 よろしくお願い致します。 <script type="text/javascript"> jQuery(function(){ var nCnt = 1; var nMax = 6; $.getJSON("./json_sql.php",function(data){ $.each(data,function(i,items){ if(nCnt <= nMax) { $("<li/>",{ text : '<img src="images/test.jpg" width="68" height="14">'+items.category+' '+items.date+' '+items.content, 'class' : items.category, }).appendTo('#portfolio'); } nCnt++; }); }); }); </script>

  • jQueryでリストを分割してページ送りを表示

    現在、以下の内容でリストを分割してページ送りで切り替えられる様にしています。 [jQuery] $(function() { var item = $('#list li').length; var i = 0; while (i < item){ var group = i * 10; var num = group + 10; for (var j = group; j < num; j++) { $('#list li').eq(j).addClass('num'+(i+1)); } i++; } /* Pagenation */ $('#list').after('<ul id="nav"></ul>') var lastrep = $('#list li:last').attr('class').replace(/no/i,''); var lists = ""; for (var i = 0; i < lastrep; i++) { lists += '<li class="page-count">'+( i+1 )+'</li>\n'; } $("nav").append(lists); /* First View */ $('#list li').hide(); $('#list .no1').show(); $('#nav li').eq(0).addClass('current'); /* Click */ $('#nav li').click(function () { var items = $(this).parent().children().index(this); var setitems = items +1; $('#list li').hide(); $('#list .no'+setitems).show(); $('#nav li').removeClass('current'); $(this).addClass('current'); }); }); [html] <ul id="nav"> <li class="page-count current">1</li> <li class="page-count">2</li> <li class="page-count">3</li> <li class="page-count">4</li> </ul> <ul id="list"> <li class="no1">item</li> <li class="no1">item</li> ... <li class="no4">item</li> </ul> このページネーションの部分を次の様にするにはどうしたら良いでしょうか…? [html] <ul id="nav"> <li class="page-count">Prev</li> <li class="page-count">Next</li> </ul> <div class="count"><span class="now">1</span>/<span class="total">4</span></div>

  • jQueryタブメニュー内へのリンク方法。

    javascript勉強中です。 調べたり試してみたりしたのですが、なかなか上手くいかず質問させていただきました。 下記のjQueryを使ったタブメニューなのですが、他のページからタブ内(tab1~tab3)へリンクさせるjavascriptの書き方や方法を教えていただけないでしょうか。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript"> $(function($) { $(".area").hide(); $(".tab_content").hide(); }); jQuery.event.add(window,"load",function(){ $(".tab01 li:first-child").addClass("active"); $(".area:first-child").show(); $(".tab01 li").each(function(i){ $(this).click(function(){ $(".content .area").hide(); $(".content .area").eq(i).fadeIn(400); if($(this).hasClass("active")){ $(".tab01 li").removeClass("active");} else {$(".tab01 li").removeClass("active"); $(this).addClass("active"); } }); }); }); </script> </head> <body> <div> <ul class="tab01"> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> <div class="content"> <div class="area" id="tab1">tab1</div> <div class="area" id="tab2">tab2</div> <div class="area" id="tab3">tab3</div> </div> </div> </body> </html> どうぞ宜しくお願い致します。

  • jqueryにてIEでの不具合 each処理?

    cromeやfirefoxでは正常に動きますが、IEにて一部動いてくれない部分があり困っています。 おかしな点や原因など教えていただきたくご質問させていただきます。 <style> .that{color:red;} </style> <script type="text/javascript"> $(function(){ $('button').click(function(){ $('#list>ul').removeClass('that'); var val = $(this).text(); $('#list>ul li').each(function(){ if($(this).text() == val){ $(this).parent().addClass('that'); }; }); }); }); </script> html↓ <button>100</button> <button>200</button> <button>300</button> <div id="list"> <ul> <li>100</li><li>200</li> </ul> <ul> <li>300</li><li>200</li> </ul> </div> クリックしたボタンの数値があるULの色を変えるものです。 100と300をクリックした場合は正常に変わりますが、200をクリックした時に変わらなくなります。 <li>の中で最後に書かれている数値が効かなくなるようで、<li>の100と200を入れ替えると100が効かなくなります。(IEのみ) 原因等わかりましたらよろしくお願いいたします。

  • JQueryについて教えて下さい。

    html部分は <ul>  <li>テスト1です。</li>  <li>テスト2です。</li>  <li>テスト3です。</li> </ul> <div id="test">test</div> となっており、 スクリプト部分は、 $("ul li:not(:first)").css("display","none"); $("#test").click(function(){   if($("+li",this).css("display")=="none"){     $("li").slideUp("slow");     $("+li",this).slideDown("slow");   } }); としています。 やりたいことは、"test"をクリックしたら、 次の"li"が表示されるようにしたいのですが、 動きません。 どなたかご教授よろしくです。

  • jQueryのアコーディオンメニューについて

    下記デモページを参考に同じアコーディオンのメニューを設置したのですが、 デモ http://www.queness.com/resources/html/accordion/index.html 上記サイトのクリックするバーを下記参考サイトの「カテゴリで探す」箇所のように 再度クリックして閉じるようにしたいです。 http://ccm.stylestore.allabout.co.jp/mojo?language=ja 下記スクリプトのどの部分をいじればいいのか、 どなたかお分かりの方がございましたらご教授頂けませんでしょうか。 ■javascript $(document).ready(function () { $('#accordion li').click(function () { //slideup or hide all the Submenu $('#accordion li').children('ul').slideUp('fast'); //remove all the "Over" class, so that the arrow reset to default $('#accordion li > a').each(function () { if ($(this).attr('rel')!='') { $(this).removeClass($(this).attr('rel') + 'Over'); } }); //show the selected submenu $(this).children('ul').slideDown('fast'); //add "Over" class, so that the arrow pointing down $(this).children('a').addClass($(this).children('li a').attr('rel') + 'Over'); }); }); 宜しくお願い致します。

  • jQueryを使ったアコーディオンメニュー

    現在、色々なサイトを見ながら、jQueryを使用した アコーディオンメニューを作成しています。(かなりの初心者です。) リンク先をクリックして、ページが移動した際に、 メニューの開いた状態が保持されるようにしたいのですが、 どうすれば良いのかわからず困っています。 //////////////////////////////////////////////// <script type="text/javascript"> <!-- var $j = jQuery; $j(function(){ $j(".acc").each(function(){ $j("a.open", this).each(function(index){ var $this = $j(this); if(index >= 0) $this.next().hide(); $this.click(function(){ var params = {height:"toggle"}; $j(this).next().animate(params).parent().siblings() .children("ul:visible").animate(params); return false; }); }); }); }); //--> </script> html部分 <ul> <li>ABC <ul> <li>A</li> <li>B</li> <li>C</li> </ul> </li>... </ul> //////////////////////////////////////////////// ↑このような感じで表記しています。 どなたかお詳しい方、ご教示よろしくお願いします。

  • jQueryを使用してのメガメニューの記述

    色々試してみたのですが、どうしてもわからず、 どうかお知恵をおかしください。 宜しくお願いいたします。 こちらの紹介サイトを参考に、メガメニューを作成しております。↓ http://codesign.verse.jp/jquery/2009/08/megamenu.html メガメニューボタンにマウスオーバーしたときに、 DIVに指定しているmm-div内のものが表示されるよう指定されているのですが、 そのメニューの中でいくつかmm-divのサイズを変更したく、 それに伴いjQueryで表示させる位置の指定を複数記述したいのですが、 jQueryを勉強不足のため、どうしてもうまくいきません。 mm-divはCSSでサイズを記述しているので、 別途指定するものとして新しいDIVに指定するタグとして mm-div2を準備しましたが、1つに連動してしまいます。 説明べたで申し訳ありませんが、 mm-divとmm-div2それぞれに別の位置が指定できる記述に仕方を教えてください。 $(function(){ var target=$("div#megamenu"); var tli=$("ul#mm-ul > li.mm-li"); var tdi=$("div.mm-div",tli); /* if($.browser.msie && ($.browser.version<8)){ var th=; }else{ var th=0; } */ tli.hover( function(){ $("*:animated",tdi).hide(); $(this).animated(); }, function(){ tdi.hide(); } ); $.fn.animated=function(){ var posx=$(this).offset().left+tdi.width(); var posbase=tli.offset().left+target.width(); /*地味に計算するための場所orz $("p#showpos").text(posx); $("p#winwidth").text(posbase); */ tdi.hide(); if(posx>posbase){ $(this).children() .css("left",-posx+target.width()) .css("top","25px") .fadeIn("fast"); }else{ $(this).children() .css("left","5px") .css("top","25px") .fadeIn("fast"); } return $(this); } });

  • 別ページからのタブ切り替えの表示について

    こちらのサイト(http://www.finefinefine.jp/web/kiji422/)を参考にタブの切り替えをしています。 ページAからページBのタブのコンテンツにダイレクトに飛べるように以下のスクリプトを設定しています。 ページAからボタンをクリックした時に、 全てのタブが開いている状態のパターンも作成したいと思っているのですが やり方がわからず悩んでいます。 どなたかお分かりの方がおられましたら どうかご教授頂けないでしょうか。 ■ページAにリンクを設置 <a href="b.html?no=0">ページBのタブ1にジャンプ</a> <a href="b.html?no=1">ページBのタブ2にジャンプ</a> ↓これを追加したいです。 <a href="">ページBのコンテンツ全て表示</a> ページB(タブページ)に以下のスクリプトを設置 ■java script $(function() { var n = window.location.href.slice(window.location.href.indexOf(‘?’) + 4); $(“.content_wrap”).hide(); $(“.content_wrap”).eq(n).fadeIn(); $(“.tab li”).removeClass(‘select’); $(“.tab li”).eq(n).addClass(‘select’) $(“.tab li”).click(function() { var num = $(“.tab li”).index(this); $(“.content_wrap”).hide(); $(“.content_wrap”).eq(num).fadeIn(); $(“.tab li”).removeClass(‘select’); $(this).addClass(‘select’) }); }); $(function() { var n = window.location.href.slice(window.location.href.indexOf(‘?’) + 4); if(n.length < $(".content_wrap").size()) { var p = $(".content_wrap").eq(n).offset().top; $('html,body').animate({ scrollTop: p }, 'slow'); return false; } }); どうぞ宜しくお願いいたします。