2種類のリスト項目をjQueryを使って揃えたい

このQ&Aのポイント
  • スマートフォンサイト制作中で、2種類のリスト項目を横並びに揃えたい方法を教えてください。
  • jQueryを使用して、classが異なる2つのul要素のリスト項目を揃える方法を教えてください。
  • HTMLのul要素のリストを動的に生成している場合でも、jQueryを使ってリスト項目を横並びに揃える方法を教えてください。
回答を見る
  • ベストアンサー

2種類のリスト項目をjQueryを使って揃えたい

スマートフォンサイト制作中です。 やりたい事は 横並びにしている2種類のリスト項目数を jQueryを使って、揃えたいって事です。 以下のようなリストがあって、 2種類のulを横並びにしています。 (2列のテーブルみたいな感じ) <ul class="column1"> <li>あいう</li> <li>かきく</li> <li>さしす</li> </ul> <ul class="column2"> <li>アイウ</li> <li>カキク</li> <li>サシス</li> <li>タチツ</li> </ul> 例として、上記の場合、class="column2"の方が<li>が一つ多いので それに合わせてclass="column1"に<li>を追加して(追加した要素の中身はブランクで)、 横並びを揃えたいのです。 ※要素の中身が2行になったりしてズレることはないです。 考え方として、おそらく class="column1"とclass="column2"のそれぞれのエレメント数を size()で取得して そのエレメント数を比較して、大きい個数に合わせて、 足りない分を、足りない<ul>要素内にappend()を使って挿入でもするのかな?? …って思っているのですが どのように書けばよいのか、やっぱり分からないのです。 ※ちなみにHTMLの、この<ul><li>リストは動的に生成しています。 現行のPCサイトのHTMLをいじらずに スマホ対応しているので、このリストを使った横並びを変えることは出来ないのです。 どなたか詳しい方、どうかご教授ください。 どうぞ宜しくお願いいたします。

  • AJAX
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 すごく簡単に実装するならこんな感じになると思います。 ブランクのliが良いか悪いかはわかりませんが、高さを揃えるとかのほうがスマートな気がします。 ==== 動作サンプル http://hppg.moe.hm/okwave/qa/q7362658/ ==== JavaScript $().ready ( function() { // 左側のリスト var $ul1 = $('div.ul1 ul li' ); // 右側のリスト var $ul2 = $('div.ul2 ul li' ); // 二つの差を求める var s = $ul1.length - $ul2.length; // 差がマイナスの場合は左側が足りないと判断し追加対象となるターゲットを設定 var $target = s < 0 ? $ul1 : $ul2; // 差の絶対値を求めその回数をループ for ( var i = 0; i < Math.abs(s); i ++ ) { $target.parent().append('<li />'); } }); ==== HTML <div class="ul ul1"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> </div> <div class="ul ul2"> <ul> <li>A</li> <li>B</li> <li>C</li> <li>D</li> <li>E</li> </ul> </div>

mc0816
質問者

補足

LancerVIIさん ありがとうございます。 スクリプトに加え、 一つ一つの詳細なコメントと、 それに動作サンプルまで… 本当にありがたいです。感謝です。 おかげさまで、期待通りに動きました!! ただ、分からないところが一点。 ターゲットを設定するところの var $target = s < 0 ? $ul1 : $ul2; なのですが、 s < 0 ? $ul1 : $ul2; ってどういう意味か、簡単でよいので教えていただけますか? ?とかって、よく分かってないので 簡単で全然、大丈夫ですので、教えていただけると助かります。 ちょっと本とかを調べたのですが、 やっぱり分からなかったので。 よろしかったらお願いいたします。 重ね重ね、申し訳ありません。

その他の回答 (1)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 >ただ、分からないところが一点。 >ターゲットを設定するところの >var $target = s < 0 ? $ul1 : $ul2; >なのですが、 >s < 0 ? $ul1 : $ul2; キーワードとしては三項演算子と呼ばれるものです。 $target = s < 0 ? $url1 : $url2 の場合は s<0がtrueの場合は$url1,s<0がfalseの場合は$url2を$targetに代入するという処理です。 if ( s < 0 ) { $target = $url1; } else { $target = $url2; } と、動きは等価です。 (条件) ? 真の場合 : 偽の場合; となります。

mc0816
質問者

お礼

LancerVIIさん ありがとうございます。 なるほど~ if文がそうやって書けるなんて。 大変、勉強させていただきました。 LancerVIIさんの解説はとても分かりやすかったです。 本当に感謝です。 これからも、またこちらでお世話になる質問をするかもしれませんが その際は、どうぞ宜しくお願いいたします。 がんばって、jQueryをもっと、もっと勉強します。 ありがとうございました!

関連するQ&A

  • jQueryでリストを3項目ずつにしたい。

    いつもこちらでお世話になっています。 またjQuery関連で質問をさせて下さい。 下のようなリスト項目をfloatさせています。 <ul class="box"> <li>項目1</li> <li>項目2</li> <li>項目3</li> <li>項目4</li> </ul> レイアウトをcssで設定して 1行あたり3項目ずつの横並びにしたいと考えています。 4項目以上の場合は、 2行目に、あらたに3項目分のリストを表示したいです。 ※liの個数は動的に変化します。 ※cssの方は特に問題なく出来ています。 例えば上記の例のように4項目あった場合に 2行目が1項目分しかないため、2項目分の余白ができるので その足りない分のliの個数を算出し、liを追加したいと考えています。 $('ul.box').append('<li />'); を使うのだと思うのですが どのようにappendするliの個数を、算出したらよいのでしょうか? 詳しい方、初心者の私にどうかご教授下さい。 いつもながらに恐縮ですが、何卒、宜しくお願いいたします。

  • jQueryでリスト項目の表示・非表示を切りかえる

    jQueryに詳しい方教えてください。 下記のようなHTMLがあって、 jQueryを使って<li>要素の表示/非表示を切り替えたいのです。 ---------------- HTMLスクリプト <ul class="test">  <li>項目1</li>  <li>項目1</li>  <li>項目1</li> </ul> 切り替えるタイミングはxmlのデータ内にflagを立てています。 flagの値は取得できました。(確認済み) 仕様としては、flagの値が 0の時は→<li>要素の1つ目と2つ目を表示させる。 1の時は→<li>要素の3つ目のみを表示させる。 2の時は→<li>要素のすべてを表示させる。 ということをしたいのです。 ですが、なぜかうまくいきません。 以下のように書きました。 if(flag==0){  $(".test li:eq(2)").hide(); }else if(settlementflag==1){  $(".test li:eq(0)"), .test li:eq(1)").hide(); }else if(settlementflag==2){  //何もしない }; そもそもこうゆう書き方で合っているのしょうか? jQueryを勉強したてで、恥ずかしいばかりですが、 ご教授のほど宜しくお願いいたします。

    • ベストアンサー
    • AJAX
  • jqueryで孫要素を追加する方法

    分からない事があり、質問させていただきます。 やりたい事はphpからデータを受け取りその数に合わせて動的にli要素を出力する、という物です。 <div id="list_box"> <li class="item"> <a href="">こんにちは</a> </li> . . . </div> というような感じにしたいです。 jqueryで自分なりに書いてみたんですが、 for (var i = 0; i < data.length; i++) { $('#list_box').append('<li class="item"></li>')  .find('li')  .append('<a href="">' + data[i].name + '</a>'); } これでは思うような結果にはなりませんでした。 よく考えてみると find()で指定した li は直前で追加したli要素に限定できていません。 うまくいかない理由は分かったと思うのですが、どういう風にセレクタを指定すればよいのか解りません。 ご回答よろしくお願い致します。

  • jquery sortableについて

    2つのsortable要素があり、リスト1の特定の要素のみリスト2に移動できるようにできないでしょうか? 下記のlist1のアイテム2のみlist2へ移動でき、アイテム1・アイテム3はlist1内でソートのみ。 <ul id="list1"> <li>アイテム1</li> <li>アイテム2</li> <li>アイテム3</li> </ul> <ul id="list2"> <li>アイテム4</li> <li>アイテム5</li> <li>アイテム6</li> </ul> $("#list1").sorable(); $("#list2").sorable();

  • jQueryでHTML表示の部分

    jQueryで表示されるデータをHTMLで表示するのですが、 色々いじっていたのですが、表示されなかったり<li>タグだけしかひょうじされなかったりして、 いまいちわからなくて、質問を致しました。 -現在の表示------------ <li>No:1 Title:タイトル</li> ----------------------- <li>タグの中にclassを追加したいのですが、 どうすれば、<li>タグにclassが追加されるのでしょうか。 ----------------------------------- <li class="test">No:1 Title:タイトル</li> ----------------------------------- こんな感じに表示させたいのです。 大変申し訳ございませんが、よろしくお願い致します。 <script type="text/javascript"> jQuery(function(){ $.getJSON("./json_sql.php",function(data){ $('p','#demo').remove(); $('#demo').append('<ul/>'); $.each(data,function(i,items){ $("<li/>",{ text:'No:'+items.no+' Title:'+items.title }).appendTo('ul','#demo'); }); }); }); </script> <div id="demo"> <h4>リスト</h4> </div>

  • 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>

  • プレビュー画面でリストマークが消えない

    いつもお世話になります。 DW CS3でナビゲーションバーを作成しようとしているのですが、CSSでlist-style:none;やlist-style-type:none;にしてもリストマークが消えてくれません。 さらにfloat:left;を使っても横並びになってくれません。 デザイン画面ではリストマークも消え横並びになっているになぜかプレビューで確認すると反映されていないのです。 HTMLおよびCSSは下記の通りです。 どなたか詳しい方、ご教授願います。 HTML <div id="nav"> <ul> <li class="nav01"><a href="#0"><img src="images/keybridge.gif" border="0" /></a></li> <li class="nav02"><a href="#n" class="style14">News</a></li> <li class="nav03"><a href="#s" class="style14">Schedule</a></li> <li class="nav04"><a href="#a" class="style14">Access</a></li> </ul> </div> CSS #nav { background:#FFFFFF } #nav ul{ width:100%; margin:0 auto; overflow:hidden; } #nav li { width:25%; float:left; list-style:none; } #nav a{ display:block; text-align:center; text-decoration:none; } #nav a:hover{ background:#CCCCCC }

    • ベストアンサー
    • CSS
  • 横並びサイトマップをリスト要素で構築したいけど..

    お世話になります。 現在制作中のWebサイトで、訪問者のためのサイトマップを構築したいと考えています。 ページ数が少ない関係で一般的によく見るサイトマップとは違い、横並びのサイトマップにしたいと考えています。(添付画像のようなデザインです。) 三層式とでもいうのでしょうか、ふたつめの店舗案内の欄に、ふたつに分かれるページ(情報1ページと情報2ページ)があり、さらに情報1~4とコンテンツごとに分類してあるものです。 一層目のコンテンツ下部にはbackground-img no-repeat bottomでドット線の画像を表示させたいです。参考書など見ながら記述してみたのですが、全くといっていいほどいまくいかず、困ってしましました。すべてのリストが左端へ順番に並んでいるようなレイアウトになってしまいました...。 絶対私のHTML/CSSの記述がおかしいことは理解できるのですが、どこを直せばいいのかも分からない状態です。どうかご教授いただけたらと思い、質問させていただきました。 よろしくお願いします。 HTML--- <div id="info_sitemap"> <ul> <li>TOPページ</li> <li>店舗案内 <ul> <li class="01">情報ページその1 <ul> <li class="03">コンテンツ1</li> <li class="03">コンテンツ2</li> <li class="03">コンテンツ3</li> <li class="03">コンテンツ4</li> </ul> </li> <li class="01">情報ページその2</li> <li class="01">情報ページその3</li> </ul> </li> <li>ご利用方法 <ul>   <li class="02">情報01</li>  <li class="02">情報02</li>   <li class="02">情報03</li>     <li class="02">情報04</li> </ul> </li> <li>業務案内 <ul>   <li class="02">情報01</li>  <li class="02">情報02</li>   <li class="02">情報03</li>     <li class="02">情報04</li> </ul> </li> <li>ブログ</li> <li>お問い合わせ</li> </ul> </div> CSS--- #info_sitemap { width:660px; } #info_sitemap ul { list-style:none; margin:0; padding:0; } #info_sitemap ul li { background:url(../images/contact_03.jpg) no-repeat bottom; font-family:"じゅん 34", "ヒラギノ丸ゴ Pro", monospace, fantasy; background-color:pink; width:100px; } #info_sitemap ul ul { list-style:none; margin:0; padding:0; } #info_sitemap ul ul li.01 { width:100px; background-color:green; } #info_sitemap ul ul li.02 { width:100px; background-color:green; display:block; } #info_sitemap ul ul ul { list-style:none; margin:0; padding:0; } #info_sitemap ul ul ul li.03 { display:block; float:left; background-color:blue; width:100px; }

    • ベストアンサー
    • CSS
  • NNでだけリストの一番上の項目がずれます。

    IE、Opera、Firefox では問題なく表示されますが、Netscapeでだけ、リストの最初の項目の位置がずれます。 どうやら、CSSの li {margin: 0; padding: 4px;} が反映されていないようです。 <div id="xxx"><a name="aaa" />   <!-- Menu -->   <div class="navi">     <ul>       <li><a href="#aaa">ホーム</a></li>       <li><a href="#bbb">あいう</a></li>       <li><a href="#ccc">えおか</a></li>     </ul>   </div>   <!-- Content -->   <div class="content">中身</div> </div> 「ホーム」がずれます。 正しく反映させる方法はありますでしょうか?

  • リストの高さを揃えたい

    リスト2行を左右に並べて設置したいと思い、テーブルのセルの中にそれぞれ記述しました。 左のセルには5行、右のセルには4行あります。 右側が1行少ないことで、左右で高さが異なってしまいます。(図があります) どうも、右側のリスト全体がセルの中央に配置されている感じがします。 左右で高さを揃えたいのですが、その方法を教えてください。 HTMLとCSSは以下のとおりです (HTML) <table> <tr> <td class="sample"><ul> <li>ABC</li> <li>DEF</li> <li>GHI</li> <li>JKL</li> <li>MNO</li> </ul> </td> <td class="sample"><ul> <li>PQR</li> <li>STU</li> <li>VWX</li> <li>YZA</li> </ul> </td> </tr> </table> (CSS) .sample{ text-align: left; valign: top; padding: 0px; border: none; }

    • ベストアンサー
    • CSS

専門家に質問してみよう