jqueryについて、$("+dd",this)について教えていただけませんでしょうか
【参考サイト】
http://ascii.jp/elem/000/000/498/498710/index-6. …
上記のページのアコーディオンメニューを作る記述において、
$(function(){
$("dd:not(:first)").css("display","none");
$("dl dt").click(function(){
if($("+dd",this).css("display")=="none"){
$("dd").slideUp("slow");
$("+dd",this).slideDown("slow");
}
});
});
の
if($("+dd",this).css("display")=="none")
の部分の"+dd"に何故、+が付くのでしょうか。
確かに上記の様に記述をすると上手く動作をしますので、正しいのだと
思うのですが、そうなる理由が解らなくて混乱してしまっています。
thisが示す$("dl dt")の下層の要素を指定するための記述ならば、
if($("this dd").css("display")=="none")
として、$("dl dt")の下層にあるddという様な指定は出来ないのでしょうか。
まだ、ほとんどjqueryの記述ルールを把握していないので、お恥ずかしいのですが、
何卒、宜しくお願いいたします。
No.2ベストアンサー
- 回答日時:
>thisが示す$("dl dt")の下層の要素を指定するため
ddはdtの下層ではなくdtの兄弟です
そのため隣接セレクタを使う必要があります
別の書き方をするなら
$(this).next() とか。
あと、記述ルールというか、
オブジェクトであるthisと、
文字列でしかないセレクタ
を混同してしまっているようなのでその辺りを意識してみてはどうでしょう。
> 別の書き方をするなら
> $(this).next() とか
.next()を使って記述を
$(function(){
$("dd:not(:first)").css("display","none");
$("dl dt").click(function(){
if($("+dd",this).css("display")=="none"){
$("dd").slideUp("slow");
$("+dd",this).slideDown("slow");
}
});
});
を
$(function(){
$("dd:not(:first)").css("display","none");
$("dl dt").click(function(){
if $($(this).next()).css("display")=="none"){
$("dd").slideUp("slow");
$($(this).next()).slideDown("slow");
}
});
});
としたら同じように動きました。
こちらの記述ならば、一応自分の中で納得ができました。
(無知に近い状態の身で納得もくそも無いかもしれませんが・・・。)
> 記述ルールというか、
> オブジェクトであるthisと、
> 文字列でしかないセレクタ
> を混同してしまっているようなのでその辺りを意識してみてはどうでしょう。
もっと記述ルールを覚え、また基本的な部分をちゃんと理解していきたいと思いました。
本当にありがとうございました。
No.3
- 回答日時:
No.1です。
私もそんなにjqueryの仕組みに精通してるわけじゃないんですが、jqueryのコアクラス?である$()は、引数の数とそのタイプ、内容によって
いろいろな物に化けて、多様な機能を提供できるようになっているのですよ。
このへんはまさに、javascriptのオブジェクトや関数定義の内容を後から好き
方だいに追加・変更・削除できるという性質やargumentsオブジェクトなんて
のがあるのを、とことん利用して作られてますね。
「プロトタイプベースオブジェクト指向言語」てゆうそうですが、難しいです
よね。
ちなみに $(this + dd) だと、まずjavascriptでthis+ddを計算しようとして、
thisがオブジェクトでddは未定義の変数と解釈されるのでエラーですよね。
何故 $("+dd",this) が許されるのかは、jqueryのソースをじっくり研究しな
いと真の解答はでないです。
ここは素直に
thisに格納されたjqueryオブジェクトに対して"+dd"のセレクター書式で
もって検索されると納得しときましょう。
※(CSSの隣接セレクターだと E1 + E2 と2つ書かないとエラーなんですが..)
納得出来ないなら、jquery使うのを止めるか、納得出来るまでとことん調べて
納得してから使うとか、ツールに対するこだわりですね。
> jqueryのコアクラス?である$()は、引数の数とそのタイプ、内容によって
> いろいろな物に化けて、多様な機能を提供できるようになっているのですよ。
> 何故 $("+dd",this) が許されるのかは、jqueryのソースをじっくり研究しな
> いと真の解答はでないです。
なるほど!
自分の勉強不足で、本当に理解するにはjqueryのルールだけではなく、根本的なjavascriptから
勉強していかないといけないみたいですね。
一朝一夕で理解しようと思うほうが無理という話ですね。
しかし、毎度yyr446さんからいただく説明はとてもわかりやすく親切に書いていただいているので
とても参考になります。
> thisに格納されたjqueryオブジェクトに対して"+dd"のセレクター書式で
> もって検索されると納得しときましょう。
わかりました!今は納得しておいて、追々勉強をしていきたいと思います。
本当にありがとうございました。
No.1
- 回答日時:
if($("this dd").css("display")=="none")
として、$("dl dt")の下層にあるddという様な指定は出来ないのでしょうか。
=>$("this dd")とするとthisが単なる文字列となって<this>要素を探しちゃいますよね
だからだめです。
ここでのthisは、クリックされた<dt>要素の事ですよね。
+ddの+の意味は次に出現する要素の意味で,$("+dd")は次に出現する<dd>要素を選ぶ
セレクター(検索条件)です。
一方 $("+dd",this) の構文はセレクターというより、
jQuery(expression, context) の構文で
expressionの条件にマッチする要素をcontextの要素から抽出して返す意味合いです。
日本語の解説サイトもありますよ。
ご参考に
http://semooh.jp/jquery/api/core/jQuery/expressi …
いつも。お世話になっております。
早速のご回答、誠にありがとうございます。
> +ddの+の意味は次に出現する要素の意味で,$("+dd")は次に出現する<dd>要素を選ぶ
> セレクター(検索条件)です。
についてですが、それは
隣接セレクター $("要素1 + 要素2") とはまた違うものなのでしょうか。
僕の勝手な思い込みで、『隣接セレクター』は要素1に対しての隣り合わせの要素2を抽出するという
事かと思っておりましたが、その場合、例えば、まったく関係ない構文で
$(function(){
$('+dd').html();
});
のような記述の時は、何に対しての隣接を指すのでしょうか。
もしくは、Query(expression, context)の構文では、"+"を付けるだけでcontextが示す要素の隣接要素という認識になるという事なのでしょうか。
いまいち隣接セレクターの使い方が把握できていませんでした。
また、例えば、
> if($("this dd").css("display")=="none")
> として、$("dl dt")の下層にあるddという様な指定は出来ないのでしょうか。
> =>$("this dd")とするとthisが単なる文字列となって<this>要素を探しちゃいますよね
> だからだめです。
とありますが、
if($(this + dd).css("display")=="none")のような記述でも、やはり駄目でしょうか。
本当に何も知らないので、基本中の基本のような質問ばかりになってしまいますが・・・。
丁寧に参考サイトまで教えていただき、誠にありがとうございます。
お手数をお掛けしますが、何卒、宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GASに文字列として関数を入れる...
-
addEventListener()でリスナー...
-
2段階プルダウンで1段階目の選...
-
スマホ上で、左右スワイプで次...
-
Outlookのアカウントがあるとメ...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
前回の質問の続き function mov...
-
このプログラムに、王手をかけ...
-
前回の質問の続き function mou...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
-
プログラムについて。
-
Q&A掲示板の入力フォームに文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
階層別の組織図の自動作成について
-
jQueryのアコーディオン一番目...
-
wordpressでcookie.jsを使う
-
【JQuery】iframeのリンク先変...
-
アコーディオンメニューが他に...
-
JavaScriptでtabindexの変更っ...
-
readyStateが4にならない原因
-
Javascriptを使ってQRコード読...
-
カンマ区切りのデータを配列に...
-
インラインフレームを自動更新...
-
JavascriptからPHPへのAjax通信...
-
SQLのmaxで求めた値を変数に代...
-
jQueryのblockUIをformのボタン...
-
一定時間ごとに表示内容を切り...
-
二つのbxsliderをレスポンシブ...
-
変数にドットをいれることはか...
-
jQueryで追加した要素がマウス...
-
jquery.csv2table.jsに検索窓
-
FullCalendar の複数月表示につ...
-
★大至急!JavaScriptのif文教え...
おすすめ情報