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

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

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

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

jQuery

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

Q&A

解決済

4回答

2172閲覧

クラス名の指定に「.」コンマが必要な時と不要な時の違いについて

ZZ-TOP

総合スコア36

JavaScript

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

jQuery

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

1グッド

1クリップ

投稿2019/03/27 11:47

JavaScriptの勉強をいています。
以下のコードはJavaScript/jQueryのサンプルのコードで正常に動作します。

ですが、クラス名の指定に「.」が付与されているところが
2か所あり、なぜ「.」が付与されるのか理解できません。

1番の「$(idName).find('.check').addClass('crowded'); //1_「.」
2番の「$('.check').on('click',function(){ //2_「.」

はどうして、どちらともクラス名の前に「.」が必要なのでしょうか?

どちらも「.」は必要ないと思うのですが、実際に「.」を削除すると動作しません。
※文法的にはシングルクォーテーションで囲うだけで問題なく指定出来ると思うのですが。

1番と2番のコードでクラス名を指定するために「.」が必要である理由を教えて下さい。

=クラス名を指定する時に「.」が必要になる場合と、
必要ない場合の違いを教えて下さい。


追記
クラス名の指定に「.」が必要、、、というだけでも理解出来ないのですが
もっとわからないのは「('.check')」の方です。

仮に「.」が必要だとしても、なぜ「'」シングルクォーテーションの中に
「.」が入るのでしょうか?

「(.'check')」とか「find.('check')」ならなんとか納得出来ます。
※メソッドとして扱うから、、、という理由ですから。

このことも含め、クラス名のを指定する時に「.」が必要な場合と
必要ない場合の違いが全く理解できません。

すいませんが、詳しい方、説明の上手な方、よろしくお願いします。

※ネットで調べようとしたのですが、検索するためのキーワードが思いつきません。
似たような事例について詳しく書かれているページへのリンクでもOKです。

よろしく、お願いします。

コードは以下の通りです。
※必要ないと思いますが、json、HTML/CSSも記載しておきます。


JavaScript

1 2<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 3<script> 4$(document).ready(function() { 5 $.ajax({ 6 url: 'data-A.json', 7 dataType: 'json' 8 }) 9 .done(function(data) { 10 console.log('AA'); 11 $(data).each(function() { /*$(data).each*/ 12 if (this.crowded === 'yes') { 13 var idName = '#' + this.id; 14 $(idName).find('.check').addClass('crowded'); //1_「.」 15 } 16 }) //$(data).each 17 }) //done 18 .fail(function() { 19 window.alert('読み込みエラー'); 20 }) 21 22 //click 23 $('.check').on('click', function() { //2_「.」 24 if ($(this).hasClass('crowded')) { 25 $(this).text('crowdedはあるよ').addClass('red'); 26 } else { 27 $(this).text('ないよ').addClass('green'); 28 } 29 }); //click 30}); //ready 31</script> 32 33

↓ data-A.json

json

1[ 2 {"id":"js","crowded":"yes"}, 3 {"id":"security","crowded":"no"}, 4 {"id":"uiux","crowded":"no"} 5]

HTML

1<ul class="list"> 2<li id="js"> 3 <h4>JavaScript勉強会</h4> 4 <p class="check">空き状況を確認</p> 5</li> 6<li id="security"> 7 <h4>セキュリティ対策講座</h4> 8 <p class="check">空き状況を確認</p> 9</li> 10<li id="unix"> 11 <h4>UI/UXハッカソン</h4> 12 <p class="check">空き状況を確認</p> 13</li> 14</ul> 15

CSS

1.list li{ 2border: solid 1px; 3width: 12.5%; 4float: left; 5margin: 10px; 6list-style: none; 7text-align: center; 8} 9 10.list h4{margin: 10px;} 11 12.check{ 13background-color: cyan; 14margin: 0px 3px 3px 3px; 15cursor: pointer; 16} 17 18.red{background-color: #FF0000;} 19.green{background-color: #00FF00;}

画像はブラウザ上の表示です。
動作はjsonの内容を参照しており、
水色の背景色のテキスト「空き状況を確認」をクリックすると

テキストコンテンツが「checkはあるよ」(背景色:ミドリ)
「ないよ」(背景色:赤)に変わります。


ブラウザ上の表示
イメージ説明

↓ クリック後
イメージ説明

msssss👍を押しています

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

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

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

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

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

guest

回答4

0

ベストアンサー

一言で言うと仕様です。
CSSでclassは.、idは#をつけるルールですよね?何もつけないとタグ名です。
それがそのまま「セレクタ」としてjQueryで利用することになるわけです。

必要ないケースはhasClass()など引数がclassであることが明確なケース。

こういうのを全部洗い出してたらキリがないのでMDNのリファレンスをざっと読んでください。回答でおさまる話ではないです。

投稿2019/03/27 11:59

m.ts10806

総合スコア80850

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

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

ZZ-TOP

2019/03/27 12:12

回答して頂きありがとうございます。 >必要ないケースはhasClass()など引数がclassであることが明確なケース。 ↓ こういう覚え方で良いのですね。 >一言で言うと仕様です。 CSSでclassは.、idは#をつけるルールですよね?何もつけないとタグ名です。 それがそのまま「セレクタ」としてjQueryで利用することになるわけです。 ↓ わかりました。 「CSSでclassは.、idは#をつけるルールですよね?何もつけないとタグ名です。」 ↓ 確かにそのとおりです。 覚えやすい(わかりやすい)説明をして頂きありがとうございます。 こういうのを全部洗い出してたらキリがないのでMDNのリファレンスをざっと読んでください。 ↓ やっぱりそういうものなんですね。 リファレンスを読むのは上級者だけだと思っていたのですが、 これから、機会を見つけてちょくちょく読んでいきます。 わかりやすいで回答で説明して頂きありがとうございます。 機会がありましたら、またお願いします。 ※しばらく質問は開けておきます。
m.ts10806

2019/03/27 12:22

マニュアルとかリファレンスを使えるようになってようやく初心者から卒業できると言っても過言ではないですよ。どの言語でもですが、敬遠している人は大抵初心者から抜けられてません。 回答でマニュアルやリファレンスを参考資料や根拠資料とするケースがありますが、あれは回答だけのためではなく、確実な情報がマニュアルにあると伝えたいがためです。 そこを点ではなく「他にも機能説明がないか」と興味を持てるかどうかが成長の鍵だったりします。
think49

2019/03/28 03:38

> こういうのを全部洗い出してたらキリがないのでMDNのリファレンスをざっと読んでください。 補足しますと、jQueryリファレンスでセレクタが必要な事を確認して、MDNでセレクタ仕様を確認ですね。 https://api.jquery.com/jQuery/#jQuery1 ちなみに、基本的なセレクタ仕様はjQueryリファレンスにも載っています。 https://api.jquery.com/class-selector/ 今回はセレクタが必要な事に気が付けなかったようなので、jQueryリファレンスで "Selector" のキーワードに辿り着くのが出発点ではないかと思います。
m.ts10806

2019/03/28 03:46

think49さん 補足ありがとうございます。
guest

0

もっとわからないのは「('.check')」の方です。

CSS での指定が「.check」なのは理解できているなら、同じ「セレクタ」という概念を使っているもの、と理解すればよいのでは。jQueryは標準のDOMメソッドに(jQuery開発当時)無かった「CSSのセレクタを使って要素を取得できる」便利なツールでした。(今はquerySelectorが有りますが)

【jQueryが要素検索に使うSizzleについて。 | Ginpen.com】
https://ginpen.com/2012/09/14/sizzle/

【jQueryのセレクタメモ - Qiita】
https://qiita.com/Thought_Nibbler/items/5d4fc40a4d4325128b24

【CSS セレクター - CSS: カスケーディングスタイルシート | MDN】
https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Selectors

【CSSのセレクタとは?覚えておきたい25種類と書き方】
https://saruwakakun.com/html-css/reference/selector

投稿2019/03/27 12:13

kei344

総合スコア69398

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

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

ZZ-TOP

2019/03/27 13:29

回答して頂きありがとうございます。 リンク先を確認しました。 みなさんのアドバイスの通り、結局 CSSのセレクタと同じととらえるのがわかりやすいですね。 CSS関連のリンク先で見やすいページを教えて頂き ありがとうございます。 【CSSのセレクタとは?覚えておきたい25種類と書き方】 https://saruwakakun.com/html-css/reference/selector ↑このページ見やすいですね。 私はいつも 意外と知らない!?CSSセレクタ20個のおさらい http://weboook.blog22.fc2.com/blog-entry-268.html を参考にしていますが、JavaScriptのことばかり 考えていたので、CSSのセレクタと同じに扱うと いうことに全く気が付きませんでした。 ---- 【jQueryのセレクタメモ - Qiita】 https://qiita.com/Thought_Nibbler/items/5d4fc40a4d4325128b24 ↓ 基本セレクタ タグ名 or クラス名 or ID による指定ができる。 $("form"); // タグ名="form" $(".className"); // クラス名="className" $("#formId"); // ID="formId" が今回の事例に相当するのですね。 今回は、いろいろ教えて頂きありがとうございます。 機会がありましたら、またお願いします。
guest

0

「find('check')」や「$('check')」だとcheckというタグを探します

投稿2019/03/27 11:54

yambejp

総合スコア114769

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

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

ZZ-TOP

2019/03/27 13:45

回答して頂きありがとうございます。
guest

0

なぜ「.」が付与されるのか理解できません。

大雑把に言うと.check*[class="check"]のショートカットです。
なので、気に入らなければ後者を使うこともできます。
とりあえず、納得ができるまで後者を使ってみてはいかがでしょうか。

「(.'check')」とか「find.('check')」ならなんとか納得出来ます。

※メソッドとして扱うから、、、という理由ですから。

同様の理屈で、0.1という数値表現にも「0はオブジェクトではないし1はプロパティでもメソッドでもないので'.'を使うのはおかしい」という疑問が可能かと思うのですが、質問者さんはこの疑問について答えることはできますか?

「小数点のドットと、オブジェクトのドット記法のドットは、記号が同じでも意味が違う」という回答になるかと思います。

セレクタも同様に考えてください。
クラスセレクタのドットと、オブジェクトのドット記法のドットは、記号が同じでも意味が違う」
ということです。

仮に「.」が必要だとしても、なぜ「'」シングルクォーテーションの中に

「.」が入るのでしょうか?

jQueryのソースを見るといいかもしれません。文字列で与えられたセレクタを解釈しgetElementById()などのDOMメソッドを呼んでいます。
文字列が期待されていますから、シングルクォーテーションなどで囲み文字列リテラルとして表記する必要があります。

投稿2019/03/27 12:41

Lhankor_Mhy

総合スコア36074

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

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

ZZ-TOP

2019/03/27 13:48 編集

詳しく回答して頂きありがとうございます。 >同様の理屈で、 ~ セレクタも同様に考えてください。 「クラスセレクタのドットと、オブジェクトのドット記法のドットは、記号が同じでも意味が違う」 ということです。 ↓ アドバイスありがとうございます。 JavaScriptのことばかりに気を取られていたのですが、 みなさんにご指摘して頂いているとおり、CSSのセレクタと同じ感覚なのですね。 「mts10806」さんがご指摘の通り ※「『.』が必要ないケースはhasClass()など引数がclassであることが明確なケース。」 があるので、これだけは独立して覚えておく必要があるのですが。 ---- > 仮に「.」が必要だとしても、なぜ「'」シングルクォーテーションの中に 「.」が入るのでしょうか? >文字列が期待されていますから、シングルクォーテーションなどで囲み文字列リテラル(https://mzl.la/2CFrAg1)として表記する必要があります。 ↓ リンク先確認しました。 英語もあり今の私にはレベルが高くて全部理解できないです。 ですが、「String.length プロパティを文字列リテラルで用いることもできます。」 ↑これは普通に使うので、感覚としてはよく似ている、、、ということですね。 ---- 大雑把に言うと.checkは*[class="check"]のショートカットです。 なので、気に入らなければ後者を使うこともできます。 とりあえず、納得ができるまで後者を使ってみてはいかがでしょうか。 ↓ 教えて頂き、ありがとうございます。 1番の方は相手がjsonなので、これはイメージしやすいですね。 2番の方はHTMLページ上の要素なので、イマイチ、、、と思ったのですが、 HTMLも階層構造なので、よく見ると同じとらえ方ができる、、、ということですね。 今回はいろいろ詳しく説明して頂きありがとうございます。 機会がありましたら、またお願いします。
Lhankor_Mhy

2019/03/28 00:22

ご指摘ありがとうございます。 そういえば、~= がありましたね。存在をすっかり忘れていました。そして、全称セレクタは省略可能と。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問