jQueryの$()についての質問

このQ&Aのポイント
  • 質問内容:function()の()内に$をいれている理由とは?
  • 質問内容:targetを$()内にいれる理由は?
  • 質問内容:jQueryのページ内リンクをスクロールさせるコードの解説
回答を見る
  • ベストアンサー

jqueryの$()について

貴重な場を借りて質問させていただきます。下記のコードはページ内リンクをさせるコードなのですが、※他のサイトからコピペしてます。 2点ほどお聞きしたいことがあります。 一点目はfunction()の()内に$をいれているのはなぜでしょうか。私が書く際にはつけたことがなくて気になりました。 二点目は、targetという変数を作りったのにも関わらず、それをまた$()内 にいれ、$(target)としている理由がわからず、おしえていただけませんでしょうか。 jQuery(document).ready(function($) { $('a[href^=#]').click(function() { if ($(this).hasClass('scroller')) { var target = $(this).attr('href'); if (target != '#') { target = $(target).offset().top; $('html,body').animate({ scrollTop:target },1500,'quart'); } else { $('html,body').animate({ scrollTop:0 },1500,'quart');

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

ANo1です。 >こちらはあくまでtargetに入るのはhref属性(http://www.hogehoge.com) >だと思うのですが、 すでに、No2様が詳しく説明してくださっている通りですが… そもそもご提示のコードでは、clickイベントはページ内リンクのあるリンク要素にだけ設定されています。 それなので、イベント処理が実行されるのはページ内リンクがクリックされた時だけです。 ページ内リンクは基本的に#fugaといった形式になっており、targetにはこの値が代入されます。 その状態でtargetをセレクタとして利用すると、$(target)は$("#fuga")と同じ意味となり、結局のところ、id="fuga"を持つ要素を意味することになる。 という仕組みです。 まとめて $( $(this).attr('href') ) と記述しても同様です。

yukiponta
質問者

お礼

ご回答いただきありがとうございました。始めに回答をいただけたということで、ベストアンサーとさせていただきます。今後ともよろしくお願いします。

その他の回答 (2)

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

一点目については、APIドキュメントに書いてますね。 .ready() | jQuery API Documentation http://api.jquery.com/ready/ より引用 | [Aliasing the jQuery Namespace] | When using another JavaScript library, we may wish to call $.noConflict() to avoid namespace difficulties. | When this function is called, the $ shortcut is no longer available, | forcing us to write jQuery each time we would normally write $. | However, the handler passed to the .ready() method can take an argument, which is passed the global jQuery object. | This means we can rename the object within the context of our .ready() handler without affecting other code: (日本語情報はすぐには見つけられなかった。サンプルコードの所見れば何となく分かるかと。) 書いてあることはNo.1さんの推測と同じですね。 > こちらはあくまでtargetに入るのはhref属性(http://www.hogehoge.com)だと思うのですが、 正しくは「targetに入るのはhref属性(#fuga)」ですね。 なので target には "#fuga" のような文字列(jQueryオブジェクトではない)が入るはずです。 $('a[href^=#]') なんてことをしてるのだから 当然#から始まるhref属性が対象のはずで、 "http://www.hogehoge.com"みたいなhref属性にはならないでしょう。 alertなりconsole.logなりでtarget変数の値を調べてみてはどうですか?

yukiponta
質問者

お礼

お詳しい説明本当にどうもありがとうございました。無事解決できました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

>function()の()内に$をいれているのはなぜでしょうか。 ready関数でfunctionに渡される引数はjQueryのようです。 グローバルな$関数が使えない場合 (noConflict()を実行していたり上書きされている) を考慮して、ローカルに$を再定義しているのだと推測します。 >targetという変数を作りったのにも関わらず、それをまた$()内にいれ  var target = $(this).attr('href'); でtargetに代入されるのはjQueryオブジェクトではなく、文字列です。(例えば"#fuga"など) これをidとする要素を取得する目的で、$(target)としているのでしょう。

yukiponta
質問者

補足

ご回答どうもありがとうございました。 大変参考になります。 ただ二つ目の質問のご回答が私の技術不足で少々わからず、もう一度詳しく教えていただきたいなと思うのですが。。。 var target = $(this).attr('href'); こちらはあくまでtargetに入るのはhref属性(http://www.hogehoge.com)だと思うのですが、 $()内に入るのはhttp://~というjqueryオブジェクトではなく、'target'という文字列ということでしょうか。 そうであれば$(target)でIDを取得できる意味がわからないです。。。 すみませんお手数ですが詳しく教えていただいてもよろしいでしょうか。よろしくお願いいたします。

関連するQ&A

  • JavaScriptのプログラムについて

    $(function(){ $("#top a").click(function(){ $('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'slow','swing'); return false; }) $("#question a").click(function(){ $('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'slow','swing'); return false; }) $("#q001 a").click(function(){ $('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'slow','swing'); return false; }) $("#q002 a").click(function(){ $('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'slow','swing'); return false; }) $("#q003 a").click(function(){ $('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'slow','swing'); return false; }) $("#q004 a").click(function(){ $('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'slow','swing'); return false; }) }); ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ HTMLは少し分かりますが JavaScriptがまったく分からない素人です。 ネットで調べて上記のようにプログラムし ページ内リンクを流れるようにスクロールさせることは出来ました。 まずこのプログラムの書き方で合っていますでしょうか? また、同じ記述が繰り返されているので短くしてやろうと自分なりに $("#q001 a") $("#q002 a") $("#q003 a") $("#q004 a") $("#q005 a").click(function(){ $('html,body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'slow','swing'); return false; }) ↑のような全くの当て推量の書き方をしてみましたが動作しませんでした。 省略したり短く出来る余地があればそれも教えていただきたいです。 分かる方がおられましたらお願いします。

  • jQueryで困っています。教えてください。

    スムーススクロールを導入しようと、いろいろ調べて以下のものを参考にさせていただこうと考えています。どうゆう流れになっているのかを調べて分からないことがあったので投稿させていただきました。var target = jQuery(href == "#" || href == "" ? 'html' : href);この行の意味がわかりません。また、targetに何が代入されているのか分かりません。回答よろしくお願いします。 jQuery-------------------------------------------- //スムーズスクロール jQuery(function(){ // #で始まるアンカーをクリックした場合に処理 jQuery('a[href^=#]').click(function() { // スクロールの速度 var speed = 1000; // ミリ秒 // アンカーの値取得 var href= jQuery(this).attr("href"); // 移動先を取得 var target = jQuery(href == "#" || href == "" ? 'html' : href); // 移動先を数値で取得 var position = target.offset().top; // スムーススクロール jQuery('body,html').animate({scrollTop:position}, speed); return false; }); });

  • jQuery .click()関数について

    お世話になります。 アンカーにリンクする際URLに#example等が付いてしまうのを回避する為調べた所 $(function(){ // #で始まるアンカーをクリックした場合に処理 $('a[href^=#]').click(function() { // スクロールの速度 var speed = 400;// ミリ秒 // アンカーの値取得 var href= $(this).attr("href"); // 移動先を取得 var target = $(href == "#" || href == "" ? 'html' : href); // 移動先を数値で取得 var position = target.offset().top; // スムーススクロール $($.browser.safari ? 'body' : 'html').animate({scrollTop:position}, speed, 'swing'); return false; }); }); と、大変参考になるJavaScriptコードがありました。 このコードをそのまま流用させて頂いた所ページ内リンクについては解決しましたが #から始まるアンカーのみのクリックイベントで記述されてますので 別ページのアンカーに対応できません。 (<a href="../test#example">とリンクを貼っています。) 別ページのアンカーも同じく#example等表示させたくないのですが その場合はどのような記述をすれば良いのでしょうか。 どうか知恵を貸して下さい。よろしくお願いします。

  • jqueryについて

    サムネイルをマウスオーバーすると#targetに拡大画像を表示するものなのですがマウスオーバーで 切り替わりマウスアウトで元に戻るとこまではいいのですがフェードが全く効きません。 いろいろ試したところ$(".thumbnail a img")に変えるとフェードはするのですが今度は画像が 切り変わらなくなってしまいす。両者実装するにはどのように書き換えればいいのでしょうか? $(document).ready(function() { var originSrc = $("#target").attr("src"); $(".thumbnail a") .fadeTo(1,1) .hover( function() { var changeSrc = $(this).attr("href"); $("#target").attr("src", changeSrc); $(this).fadeTo(200, 0.5); }, function() { $("#target").attr("src", originSrc); $(this).fadeTo(500, 1); } ) });

  • offset().topでIE6エラー

    以下のjs(jquery)を実行すると IE6でエラーになります。 どうもoffset().topが引っかかているようですが、 対策がわかりません。 $(document).ready(function() { $(".test li").click(function(){ $(".test li").removeClass("hide");   $("div.box .orn").removeClass("active");   $('div#' + $(this).attr('id')).addClass("active");   $('.scroll').animate({ scrollTop: $('div#' + $(this).attr('id')).offset().top }); }) }) どなたか教えていただけると助かります。

  • jquery 追従メニュー IEについて

    下記jqueryを使って追従メニューを制作した時に、IEで確認すると限りなくスクロールできてしまいます。 解決する方法を検索しましたがわかりませんでした。 どなたかお分かりの方教えてください。 よろしくお願いします。 <script type="text/javascript"> $(function() { var offset = $("#leftcontent2").offset(); var topPadding = 15; $(window).scroll(function() { if ($(window).scrollTop() > offset.top) { $("#leftcontent2").stop().animate({ marginTop: $(window).scrollTop() - offset.top + topPadding }); } else { $("#leftcontent2").stop().animate({ marginTop: 0 }); } }); }); </script>

  • JQUERYについて教えてください。

    JQUERYについて教えてください。 readyがDOMを読み終わってから実行しろという意味は分かったのですが、 あったりなかったりするfunction()はどんな意味なのでしょうか? function(){ $(this).stop().animate({'marginBottom':'60px'},150); },function(){ $(this).stop().animate({'marginBottom':'0px'},120); こちらにあるのですがメソッドに一個必須なのでしょうか? 例 <script type="text/javascript"> $(document).ready(function(){ $('div#goto_top').hover( function(){ $(this).stop().animate({'marginBottom':'60px'},150); },function(){ $(this).stop().animate({'marginBottom':'0px'},120); </script>

  • jqueryについて

    jqueryについて こんな内容のjqueryをひとつにまとめて、なおかつ01~99(実績数)までのidを割り振る設定したいのですが可能でしょうか? 例えば $(function(){ $("#navi01-99 a").click(function(){ $("#main01-99 img").attr("src",$(this).attr("href")); return false; }); みたいな感じであとはidに番号を付ければいいみたいな・・・出来ませんでしょうか? 用途は仕事の制作実績で使用したいのですが、どなたか教えていただけますでしょうか? $(function(){ $("#navi01 a").click(function(){ $("#main01 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi02 a").click(function(){ $("#main02 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi03 a").click(function(){ $("#main03 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi04 a").click(function(){ $("#main04 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi05 a").click(function(){ $("#main05 img").attr("src",$(this).attr("href")); return false; }); });

    • ベストアンサー
    • AJAX
  • jQueryの$(this)について

    閲覧ありがとうございます。 初歩的な質問で申し訳ないのですがthisのことがすこし混乱してしまい、わからなくなってしまったので下記の場合のthisはどこを読み込むか教えてもらえると助かります。 目的:aをクリックしたときimgのsrcにaのhrefに指定してあるものを埋め込む処理 $(function(){ $("a").click(function(){ $("ul li img").fadeOut(function(){ $(this).attr(src,$("a").attr("href")).fadeIn(); }); return false; });

  • jQuery class要素を盛り込むには

    画像をマウスオーバーで変化させるコードを、こちらで教えていただいたアドバイスに従って以下の内容で行っています。 $(function(){ $('span img').hover(function(){ $(this).attr('src', $(this).attr('src').replace('.jpg', 'x.jpg')); }, function(){ if (!$(this).hasClass('currentPage')) { $(this).attr('src', $(this).attr('src').replace('x.jpg', '.jpg')); } }); }); BODY部分は、 <SPAN><IMG src="画像.jpg"></SPAN> となっています。 けれど、よくよく考えると、マウスオーバーしたくない画像でも<SPAN>の中に記述していたらコードの影響をうけて、存在しない(マウスオーバー後の)画像を読み込もうとしてしまいます。 基本的な質問で申し訳ないのですが、 区別するため、例えば、マウスオーバーさせたい<SPAN>にはclass要素を入れて、 <SPAN class="change"><IMG src="画像.jpg"></SPAN> としたとして、上記のコードの、 $('span img').hover(function(){ の辺りをどうにか変えればいいように思うのですがよくわかりません。 基本的すぎて申し訳ありませんが、よろしくお願いします。

専門家に質問してみよう