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

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

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

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

jQuery

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

Q&A

解決済

3回答

1433閲覧

OR選択のはずなのに絞りこまれているような挙動。

tkshp

総合スコア174

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/10/28 02:30

前提・実現したいこと

こちらのサイトのように、
以下の書き方はOR選択のはずですが、絞り込まれているような挙動になります。
ご教示お願いいたします。

該当のソースコード

HTML

1 <div class="detail"> 2 <div class="ui-block"> 3 <button class="get-info">取得<button> 4 <button class="save">保存</button> 5 </div> 6 </div>

jQuery

1$(function() { 2 var dtl = $(document).find(".detail"); 3 4 $(".get-info", dtl).on("click", function() { 5 console.log("test"); 6 }); 7});

実行すると、取得ボタンのクリックだけ、testのログが出力されます。
".get-info", dtlはカンマ区切りなのでOR選択ではないのでしょうか?

dtl配下には保存ボタンもあるので、保存ボタンのクリックでもtestのログが出力されると予想していたのですが、
そのようになりませんでした。
まるで、OR選択でなく、".get-info"かつdtlのような絞り込みになっていませんか?

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

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

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

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

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

guest

回答3

0

既存回答の手前の回答をします。

参考となさったサイトでは

$("セレクタ , セレクタ")

と書かれており、ここにある「,」をさして、OR検索だと(参考サイトは)言っています。また質問者さまもそう理解なさったと思います。ここまでは間違っていないです。

困っている点

$(".get-info", dtl).

ここの「,」と参考サイトでは意味がまったく違います。ここでご注目いただきたいのは、カンマというより参考サイトの$()の手前にある「"」(クォート)です。クォートではさむことにより、その間は1つの文字列となります。
そのため、参考サイトでの例は$("jQuery専用の特殊な形をした一つの文字列")となっており、その特殊なかたちの一つとして、ORのときは、あいだに「,」を入れる、ということを書いています。

一方、質問者様のように".get-info"の外に,をかくとこれは、"javascript"の"関数"の"引数"を区別するためのカンマと意味がかわります。
従って、$("一つの文字列",2つめのナニカ)となってしまっており、参考サイトとは違う動きになってきます。
(2つ目のナニカについては、think49様の回答に繋がっていきます)

もし、2つのクラスを、変数を使って表現したいというのを簡易に書くなら、

javascript

1$(function() { 2 var dtl = $(document).find(".detail"); 3 var dtl-class = dtl;//findしたものから文字列にする処理を書きます。 4 5 var target-classes = ".get-info, " + dtl-class; 6 //var target-classes = ".get-info, .detail"; //変数が不要ならこうしてもいい 7 $(target-classes).on("click", function() { 8 console.log("test"); 9 }); 10});

こういう風になるかと思います。

投稿2018/10/29 01:29

papinianus

総合スコア12705

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

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

tkshp

2018/10/29 09:02

ご回答ありがとうございます。 関数の引数との違いが理解できていなかったです。 勉強になりました。 ありがとうございます。
guest

0

ベストアンサー

jQuery( selector [, context ] )

第二引数に指定されたノードはコンテキストオブジェクト扱いとなります。

Re: tkshp さん

投稿2018/10/28 04:11

think49

総合スコア18162

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

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

tkshp

2018/10/28 04:31 編集

ご回答ありがとうございます。 コンテキストオブジェクトの意味がわからなかったので、調べてみて、 http://semooh.jp/jquery/api/core/jQuery/expression%2C+context/ こちらのサイト等見てみたのですが、 第2引数のコンテキストオブジェクトには、第1引数の親となるオブジェクトの指定ということでしょうか? つまり、$(".get-info", dtl).on("click", function() { とあった場合、dtlオブジェクトの中に絞って、".get-info"の要素を取得するということでしょうか? ただ1つ疑問があって、試しに $(dtl, ".get-info").on("click", function() { とした所、取得ボタンも保存ボタンも両方ログが出力されました。 $(dtl, ".get-info")とした場合、".get-info"要素の中のdtl要素という絞り込みをするから、両方のボタンとも反応しないと予想していたのですが、両方反応してしまい、この理由がわからないです。 ご教示お願い致します。
think49

2018/10/28 10:46

jQuery( selector [, context ] )の仕様は紹介した公式サイトに載っているので、そちらを読んでください。 .find() の代替コードも載っているので、そちらのリファレンスを読めば分かるはずです。 > $(dtl, ".get-info").on("click", function() { 第二引数に String 型はとれません。 紹介した公式サイトには「Type: Element or jQuery」と書いてるので、各リンク先を読んでください。
tkshp

2018/10/29 09:01

ご回答ありがとうございます。 勉強になりました。
guest

0

1つのクォート内に入れることに注意してください。「"div","span"」のように要素ごとにクォートで囲んではいけません。

と書いてあります。

投稿2018/10/28 02:38

Zuishin

総合スコア28660

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

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

tkshp

2018/10/28 04:03

ご回答ありがとうございます。 サイトの説明を見落としてました。 1つのクォートで囲まずにカンマ区切りにした場合、絞り込みになるのでしょうか? 何かこれに関して説明しているサイト等あれば教えていただけませんか?
Zuishin

2018/10/28 04:13

ここに説明してありますが、どういった説明を読みたいのですか?
tkshp

2018/10/29 09:03

ご回答ありがとうございます。 他の回答者様のご指摘の説明でした。 ありがとうございました。
Zuishin

2018/10/29 09:09

そこが知りたいところだったとは全く気づきませんでした。質問文と違うので。
tkshp

2018/10/29 09:15

失礼しました。 質問したいことが伝わるように気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問