jQueryでの書き方について

このQ&Aのポイント
  • jQueryでの書き方について、HTMLファイルから読み込まれるJavaScriptファイルには次のような書き方があります。
  • この書き方はHTMLの読み込みが完了してから処理を始めるため、より安全な方法とされています。
  • 一方、$(function(){...})と書かれた方法は、短縮記法としてよく使われます。
回答を見る
  • ベストアンサー

jQueryでの書き方について

HTMLファイルから読み込まれるJavaScriptファイルに次のような書き方がありました。 (function($){ $(function(){ // DOM操作などの処理を記述 ... ... }); })(jQuery); このような書き方を初めて見たのですが、これはどのような意図があるのでしょうか? HTMLの読み込みが完了してから処理を始めるように、次のような書き方はよく見るのですが、これとは何が違い、どう使い分けるのでしょうか? $(function(){ // DOM操作などの処理を記述 ... ... }); ■環境 jQuery 2.1.3

noname#241088
noname#241088

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

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

(function($){ ・・・ })(jQuery) No.1の回答の通り、無名関数を即時実行しているので、 その場で処理が実行される点はfunctionで包んでも包まなくても同じです。 違いとしては、この書き方なら、グローバル空間の$が未定義(もしくはjQuery以外が代入されている)でも、jQueryさえ定義されていれば、 function内では$でjQueryを参照できます。 また、このfunction内でローカル変数を定義すれば、 グローバル変数を作らずにすみます。

noname#241088
質問者

お礼

Gottholdさん 回答ありがとうございます。 > 違いとしては、この書き方なら、グローバル空間の$が未定義(もしくはjQuery以外が代入されている)でも、jQueryさえ定義されていれば、 > function内では$でjQueryを参照できます。 次のような書き方も最近知ったのですが、これも同じ効果があるということですよね? jQuery(function($) { ... ... }); 同じ人が、HTMLファイルにスクリプトを書く場合は2番目の書き方、外部のJavaScriptファイルに書く場合は最初の書き方をしていたので、それが関連するかと推測していたのですが、特にそういうことではないのですね。 どうもありがとうございました。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5068/13243)
回答No.1

$(function(){ }); は、いつ、誰が実行してくれるでしょう。 JavaScriptのルールからすると、この定義は関数の定義だけして実行はしていません。 jQueryが賢く、jQuery利用を前提として定義されたモノを探し出して実行してくれているのです。 JavaScriptのルールとして、関数を定義して、読込と同時に実行するためには ========== var hoge = (function() { }); hoge(); ========== と記述する必要があります。 これの省略形が ========== (function() { })(); ========== になります。(無名関数の即時実行) なので、先に書かれた記述方法はJavaScriptのルールに従ってjQuery用の関数を定義し、即時実行を行っているので、厳密にルールに従った記述方式です。

noname#241088
質問者

お礼

t_ohtaさん 回答ありがとうございます。 分解して解説して頂いたお陰で、おまじないにしか見えなかったものが多少理解できるようになりました。 >jQueryが賢く、jQuery利用を前提として定義されたモノを探し出して実行してくれているのです。 この仕組みについては、自分のJavaScript力を上げてからjQueryのソースを読んで理解したいと思います。 ありがとうございました。

関連するQ&A

  • jQueryの多重読込

    2つのHTMLがあり、両方ともjQueryプラグインを使っています。 今回、a.html側に、jQuery loadで、b.htmlを読込みました。 ■a.html jQuery 本体 jQueryUI jQueryForm jQuery.HashChanged など基本js(多数) ■b.html jQuery.Gallerific jQuery.Fancybox jQuery.fixPing などメディア系統js(多数) ■困っていること 両方とも、$(function(){ ... }) 構文を使って、DOMの展開完了を待っているのですが、「読込まれる側=b,html」の、$(function(){ ... }) がうまく働いていないようなのです。 b.html 単体では何の問題もないのですが、a.htmlにloadされると、遅延読み込みがききません。 元である a.html で全部のjQuery プラグインを読むのは重すぎるため、各々で必要なプラグインを都度、読むようにしたいのですが、その場合、読み込まれる側の実行遅延(DOM展待ち)はどのようにしたらいいでしょうか?

  • jqueryで外部ファイル読み込んだ後の動作

    jqueryで外部ファイル読み込んだ後、読み込んだ外部ファイルに記述されたIDに対しての操作をしたいんですが、うまく行きません。 ブラウザに読み込ませるHTML(main.html) <html> <head> <script type="text/javascript" src="jquery.js"></script> <script> $(function(){ $("#main").load("loadfile.html"); }); $("#str").html("50"); </script> </head> <body id="main"> </body> </html> #mainに読み込ませるHTML(loadfile.html) <html> <head> </head> <body> <p id="str">00</p> </body> </html> 自分なりの予想ではloadfile.htmlを読み込んだ後、 まだDOM要素が操作できない状態の時に$("#str").html("50"); が実行されてしまっていると思われますが、 こういう時は.ready()とかをうまく使うのでしょうか? 基本がまだ身についていなく、 とんちんかんな質問かもしれませんが、よろしくお願いします。

  • jQueryで行う初期表示処理について

    いつもお世話になります。 jqueryで画面読み込み時でDHTMLを処理する場合(表示・非表示、タグの作成などなど)、ブラウザでの表示に影響はでるものでしょうか? ※画面読み込み時・・・$(function() {.......}); で処理を記述 とういのも以前、jqueryではなく普通にjavascriptを使用して、初期表示処理をごりごり書いたシステム開発に携わったことがあるのですが、 一瞬見えた後非表示になったり、色がなにもついていない状態が一瞬見えた後、色がついたり、、、といった挙動をしていました。 jqueryは、domツリー構築後に処理が開始されると書いている記事を見たことがあるのですが、その場合でも、先に述べたような見え方をするのでしょうか? それともDHTMLによるクライアントサイドでの動的な処理は、全て完了した状態でブラウザに表示されるのでしょうか? 宜しくお願いします。

  • Jquery.ajaxでHTML読み込み

    現在、Jquery.ajaxを使って外部HTMLの読み込み処理を行い、処理完了後にフェードで表示させるということをしているのですが、読み込んだHTMLに貼り付けてある画像が読み込まれる前にHTMLが表示されてしまい、困っています。 Jquery.ajaxでは内包されている画像の監視まではできないのでしょうか? 下記が今作っているコードです。 $contest.css({ "opacity": 0 }); $.ajax({ type: "GET", url: "hoge.html" dataType: "html", success: function(data) { $contest.html($(data).find("#hoge")); }, complete: function() { $contest.stop().animate({ "opacity": 1 }, 1000, "easeOutCubic"); } }); おわかりになる方、ご教授お願いします。

  • CakePHPでjQueryを使うには

    ローカル環境にてCakePHPでwebサービスを制作しています。 ブラウザでviewを確認しながら構築しているのですが、この環境でgoogleAPIのjQueryを動作させることは出来るのでしょうか? もしできるとしたら、 <?php echo $this->Html->script('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');?> <script type="text/javascript"> jQuery('#more').click(function(){$('innerboxes').clone().appendTo('box')}); </script> で動かないのは何が問題なのでしょうか? また、googleAPIを使わない方法でも以下のように試しましたが、これも動かない原因はどこにあるのでしょうか? jQueryのホームページでver1.5のソースをコピーし作ったjQuery1.5.jsを、 webroot /jsに入れる。 Controllerに var $helpers=array('Ajax','Javascript'); を記述。 Viewに、 <?php echo $javascript->link('jQuery.1.5.js'); ?> <script type="text/javascript"> jQuery('#more').click(function(){$('innerboxes').clone().appendTo('box')}); </script> 宜しくお願いします。

  • JQueryはAJAXとは無関係??

    質問◆JQueryおよびJQueryMobileは「AJAX」とは無関係なのでしょうか? 「JQueryMobileを使っているとき、DOMによってHTMLを動的に差し替えている」という認識なのですが、 特にRequest関連の記載をJavaScriptで記載していない限り、AJAXの処理は行われないのでしょうか? それとも、 JQuery Mobileを使っている場合は、ページ遷移などで、プログラマが意識していなくても(独自にプログラムを書いていなくても) AJAXの処理が行われているのでしょうか? /************************************/ サーバへのリクエストはなくても、1つのマシン内の、HTMLファイルとHTMLファイルの間で、 HTTPで通信がされるということはないと思っています。 (※基本、HTTPはクライアントとサーバの間のときしか使われないのですよね?) JQueryの技術情報のサイトを見ていると、 よく「document.ready」と書かれていたりするソースを見かけますが、 これはAjaxとは関係なく(通信とは関係なく)、 また「xhr.send」も書かれていないHTMLは、AJAXは使われないという理解です。 (「Form、submit」とも関係がない) XMLHttpRequestも「HttpRequest」とあるわけですし、 「Form、submit」を書いているときに行われるわけではないけれども、かわりに、 「xhr.send」とJavaScriptで実行されたタイミングで走る処理であり、 その際、「サーバから返される情報がXMLのデータ形式で(XML以外もですが、、)」だという理解なのですが、合っていますでしょうか?

    • ベストアンサー
    • AJAX
  • jQueryの $(function(){ });

    jQueryについて基本的な質問をさせてください。 基本的にjQueryは、お約束として $(document).ready(function(){ }); と記述し、その中に実行処理を書いていくと思うのですが loadを待たずに実行させたい時は $(document).ready(function(){ });は記述しなくてもよいのでしょうか? どの本をみてもjQueryのお約束事みたいに $(document).ready(function(){ }); を必ず書くと載っています。 自分でやってみたところ、記述しないでも問題なく動いているのですが、 やっぱり $(document).ready(function(){ }); を記述しないと、何か問題があるのでしょうか? ご存知の方、教えてください。 どうぞ宜しくお願いたします。

  • javasc jQuery

    javascript初心者です。 jsファイルに、javascriptやjQueryを書いていますが、混乱しています。 例えば、自分が作った関数内で、この処理は、javascriptとjQueryどちらで書けばいいのか? といつも迷っています。 jQuery自体javascriptで書かれているので、jQueryで書く処理はjavascriptでも書けるのは当然だと思いますが・・・。 ただ、javascriptで書かいたりjQueryで書いたり統一性がなくなっています。 思い切って、使い慣れたjavascirptを忘れて全部jQueryで書く練習をすべきでしょうか? それとも、柔軟性を持ってその場に応じて使い分けた方が良いのでしょうか? javascirt appendchild jQuery append などなど 趣味でやっているので、他人は読みません。

  • jqueryにて

    こちらではお初にお世話になります。 よろしくおねがいします! さて、jqueryを用いてScrollFollowを実装中なのですが、 正常に動作させることが出来ません。 ソースは <script type="text/javascript" src="./jslib/ui.core.js"></script> <script type="text/javascript" src="./jslib/jquery-1.2.6.js"></script> <script type="text/javascript" src="./jslib/jquery.scrollfollow.js"></script> <script type="text/javascript" src="./jslib/jquery.easing.1.3.js"></script> <script type="text/javascript" src="./jslib/jquery.cookie.js"></script> <script type="text/javascript"> $( document ).ready( function (){ $('test').scrollFollow({ }); }); </script> をヘッド部分に、 <div id="test"> コンテンツ </div> をBODYに記述しています。 動作せずにFirefoxのエラーコンソールで確認したところ エラー: jQuery is not defined ソースファイル: (省略)update/jslib/ui.core.js 行: 238 エラー: $("test").scrollFollow is not a function ソースファイル: http://contest2009.thinkquest.jp/tqj2009/110392/update/ 行: 13 と表示されました。jsファイルの生存は確認できており、 その系統のミスではないと思うのですが。。。 どなたかアドバイスをお願いします!

  • jqueryで画像を切り替えたい

    以下ソースがあります。 ●main.js $(function(){ jQuery.ajax({ url : "./news.txt", type : "get", success : function(data){ alert(data); } }); }); ●news.txt test と記述しています。 ●index.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>jQuery Sample</title> <script type="text/javascript" src="jquery-1.7.1.min.js"></script> <script type="text/javascript" src="main.js"></script> </head> <body> <h1>jQueryサンプル</h1> <p>非同期通信の処理</p> </body> </html> この三つのファイルを同じ階層に置き、index.htmlで実行したところ 非同期通信(testのアラート)が表示されました。 そこで、 index.htmlファイルの左側にメニューを設けて、 メニューをクリックすると、画像のみが切り替わるという 内容で、jqueryによるajax実装を行いたいのです。 (左のメニュー1がクリックされれば、リンゴの画像。  メニュー2がクリックされれば、みかんの画像等) ulタグと、jquery関数にどういう仕掛けを入れると 果物画像の入れ替えが行えるでしょうか。 ご教授お願いします。

    • ベストアンサー
    • AJAX

専門家に質問してみよう