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

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

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1620閲覧

:visible 要素だけに :nth-childをつけたい

M.Takeshita

総合スコア24

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/06/03 15:00

リスト表示している項目の背景色をつけているのですが、出しわけしてしまうとその順番がぐちゃぐちゃになるので、
表示されているリストのみで背景色の付け方を整えたいのですが、jqueryではvisibleにどのようにnth-childをつければ良いのでしょうか?

jquery

1$(function(){ 2 let previous = '' 3 $('.search_item').on('click',function(){ 4 $(this).addClass('is-active').siblings().removeClass('is-active'); 5 var g=$(this).data('group'); 6 if(g=="" || g == previous){ 7 $('.online-shop-list li').show(); 8 $(this).removeClass('is-active'); 9 previous = "" 10 } 11 else{ 12 $('.online-shop-list li').hide(); 13 $('.online-shop-list').removeClass('all'); 14 $('.online-shop-list [data-group*='+g+']').show(); 15 $('.online-shop-list :visible:nth-child(4n+1)').addClass('bg'); ←こういうことがしたい 16 $('.online-shop-list :visible:nth-child(4n+4)').addClass('bg'); ←こういうことがしたい 17 previous = g 18 } 19 }); 20});

css

1.all li:nth-child(4n+1),&:nth-child(4n+4){ 2background:#f5f5f5; 3}

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

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

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

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

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

guest

回答1

0

ベストアンサー

jqueryに限ったことではないですが、セレクタでの指定において疑似クラスの指定はそれぞれ独立して条件を判断する動きになります。
例えば、

html

1<ul id="sample2"> 2 <li>データ1</li> 3 <li class="hide">データ2</li> 4 <li>データ3</li> 5 <li>データ4</li> 6 <li class="hide">データ5</li> 7 <li>データ6</li> 8 <li>データ7</li> 9 <li>データ8</li> 10 <li>データ9</li> 11</ul>

css

1.hide{ display: none; }

というhtmlがあった場合、

js

1$('li:visible:nth-child(2n+1)')

の結果は、
liのうちvisibleのもの(データ1,3,4,6,7,8,9)のうちの2n+1番目(3,6,8)
ではなく、
liのうちvisibleのもの(データ1,3,4,6,7,8,9)かつ liのうち2n+1番目のもの(1,3,5,7,9) = (1,3,7,9)

という結果になります。

前者の結果を取得したいのであれば、セレクタだけでは不可能です。1つの方法としては:visibleセレクタで表示されているタグのみ抽出したのち、filter関数で奇数番目のデータを抽出するという手法があります。

javascript

1var targets = $('#li:visible').filter((i,e) => i % 2 === 1); 2targets.addClass('bg');

この方法では、liのうちvisibleのもの(データ1,3,4,6,7,8,9)を一旦抽出し、
filter関数でインデックス番号を2で割った余りが1のものを対象にaddClassしています。

codepenでのデモ

投稿2021/06/03 16:34

hope_mucci

総合スコア4447

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

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

M.Takeshita

2021/06/04 01:32

とてもわかりやすい回答ありがとうございます! なるほど。単純に書き方が悪いだけでなく、抽出方法としても違っていた事がわかりました。 しかしfilter関数の理解が浅すぎる(単純な算数ができない)のでヒントが欲しいのですが、 やりたいのは 2列で並んでいるもの 1 2 3 4 5 6 7 8 とあった場合に2,3,6,7(もしくは1,4,5,8)に背景をつけたいという事で、この場合は 奇数や偶数というものに入れ込めないため、targetsを複数指定する必要があるという事でしょうか?
hope_mucci

2021/06/04 02:12

4で割った余りが3か0であれば良いのでしょうか。(この場合1,4,5,8が該当) その場合は、filter関数の部分を以下の様に書き換えれば良いです。 filter((i,e) => i % 4 === 3 || i % 4 === 0) (2,3,6,7)の場合は4で割った余りが2か3になります。 filter((i,e) => i % 4 === 2 || i % 4 === 3)
M.Takeshita

2021/06/04 03:27

100兆いいねくらい押したい気持ちです。 ご丁寧にありがとうございました。希望通りのソースができました! CSSもjavascriptっぽくなったと思ったのですが、まだまだ考え方が違うのですね。。 割ったあまりで考えるとは。。まだ頭が追いつきません。 非常に勉強になりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問