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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

4回答

2965閲覧

eqとnth-childでナンバリングが違う理由

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2016/06/19 03:54

編集2016/06/19 03:57

eqは0から、nth-childは1から各々ナンバリングします。
本来的にシステム言語はeqのような処理をするものだと思うのですが、nth-childはcss(Webデザイナー向け)なので、現実的なナンバリングを採用し、そういう意味で特殊な仕様だという理解でよろしいでしょうか?

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

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

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

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

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

guest

回答4

0

ベストアンサー

:nth-child() は関数形疑似クラス

結論からいえば、:nth-child()関数形疑似クラスです。
「疑似クラス」の説明に「関数系疑似クラス」の分類があり、文法上は関数式があります。

関数ですので、引数に配列のインデックスとしての意味を持たせる必要はありません。
関数はよく使う機能をまとめる為にありますので、「いかにユーザの希望する機能を実現できるか」「いかに汎用性が高い機能を実現できるか」が重要になります。
:nth-child() の引数の最小値を1にした合理的な理由については Lhankor_Mhy さんの回答が正解だと思いますのでそちらを参考にしてください。
仮に :nth-child() が 0 から index を開始する関数であった場合、:nth-odd-child(), :nth-even-child() な関数を用意することも検討に値しますが、それでは nth-child(3n) のような汎用的な機能は実現できない為、今の仕様に落ち着いてのだと考えられます。

:eq() は jQuery 独自拡張

:eq() は jQuery 独自拡張であり、Selectors API に含まれていません。
:eq() は配列のインデックスに近い思想に基づいた仕様であり、負の数を指定すると配列の後ろから数えて参照します。
JavaScript 的には Array.prototype.indexOf に近い設計仕様ですね。
:nth-child() 程の汎用性はなく、標準の :nth-child() で代替可能な為、いつ jQuery から削除されてもおかしくありません。

思い込みは理解の妨げになる

本来的にシステム言語はeqのような処理をするものだと思うのですが、nth-childはcss(Webデザイナー向け)なので、現実的なナンバリングを採用し、そういう意味で特殊な仕様だという理解でよろしいでしょうか?

おそらく、考え方がプログラミング言語よりになっていると思うのですが、CSSはスタイルシート言語であり、プログラミング言語とは考え方が異なります。
しかし、それはスタイルシート言語が特殊なのではなく、そういう仕様にすることに何らかの合理性があるからです。

私は経験的に自分の知らない分野の仕様を読むときには自分の中にある常識を出来るだけ排除して読み込むのが良いと考えています。
直観やインスピレーションは大事ですが、それらは新しい仕様から思想を読み取る事の妨げになります。
自分の中の常識を「ひょっとしてその常識が間違っているんじゃないか」と一歩引いてみる事で理解の一助に繋がる事があります。

Re: realmccoy さん

投稿2016/06/19 15:57

編集2016/06/19 15:58
think49

総合スコア18162

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

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

0

Because jQuery's implementation of :nth- selectors is strictly derived from the CSS specification, the value of n is "1-indexed", meaning that the counting starts at 1.

:nth-child() Selector | jQuery API Documentation

とのこと。実際のところ、奇数番目を:nth-childで表記する場合、1スタートだと:nth-child(2n+1)となりますが、0スタートだと:nth-child(2n)となり直観に反しますよね。

また個人的には、取りだされる要素が:eq(1)=jQueryObject.eq(1)=jQueryObject.get(0)=jQueryObject[0]だとやはり混乱するので、ArrayLikeなオブジェクトの必要性から、こちらもこれでよかったと思います。

投稿2016/06/19 08:22

Lhankor_Mhy

総合スコア36074

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

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

0

eqは開始位置を指定していて、nthは「何番目か」を指定しているから、という違いだと思います。

eq( 2 ) [1]|[2](|)[3]|[4]|[5]|[6]|[7]|[8]|[9]|[10] ↑ここ nth( 2 ) [1]|[(2)]|[3]|[4]|[5]|[6]|[7]|[8]|[9]|[10] ↑ここ

投稿2016/06/19 05:16

kei344

総合スコア69400

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

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

退会済みユーザー

退会済みユーザー

2016/06/19 06:17

ありがとうございます。 つまり、「インデックス番号」は開始位置を指定しているということでしょうか。 「開始位置」というと、以降も凡て対象になるイメージを持つのですが、開始位置の直後のみ対象とするのですね。
kei344

2016/06/19 06:28

わかりやすいかと思って「開始位置」と書きましたが、「インデックス」か「インデックスの位置」とするほうが良いのですね。すみません。 > 開始位置の直後のみ対象とする eqが「インデックスの位置から1つ要素を取り出す」という動きだからそうなる、ということなので、インデックスを引数に採る物が全てそうと言うことではありません。
guest

0

単にcssのnth-childの仕様に合わせたからですね。
cssの仕様がそうなっているのは、そう決めたからということでしょう。

投稿2016/06/19 05:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問