jQuery わからない方へ

記事の目的

本記事の目的はjQueryのコードが理解できるようになることです。動きのあるwebページを作成する際、ネットではjQueryの記事がよく出てきますが、javascriptは分かっても、jQueryがわからないと困ります。この記事では、jQueryを解読する際に必要な予備知識を解説します。

必要知識

html, css, javascriptの基礎知識

jQueryとは

jQueryとは、javascriptのライブラリのことです。
ライブラリというと、関数や変数が定義されているものですがjQueryには、何が定義されているのでしょうか。それは、“jQueryオブジェクト”です。
つまり、jQueryのライブラリファイルを読み込めば、通常のjavascriptの関数に加えて、jQueryオブジェクトの関数が使用できるようになります。

jQueryオブジェクトには‘jQuery’でアクセスできますが、記述を簡単にするために、‘$’で置き換えることができるようになっています。
以下は、jQueryオブジェクトに登録されているtrim関数を呼び出した例です。

$ = jQueryと認識していてください。この記事で出てくるコードの$もすべてjQueryという表記に置き換え可能です。

$を見かけたら、とにかく、「jQueryの関数を使いたいのだな」と解釈してください。以下、$の主要な使われ方を紹介します。

$(…)

$(…)という記述がjQueryのコードでは必ず見かけられます。これは関数を表しているのですが、用途が多岐にわたるので、予備知識なしで見ると理解に苦しみます。ここでは、$()関数の主な使い方を3つ解説します。

  1. 引数に文字列をとる場合:$(‘…’)
  2. 引数にElementをとる場合:$(…)
  3. 引数に関数をとる場合:$(function(){})

これらは、すべて公式ドキュメントに記載されているので、詳しくは
https://api.jquery.com/jQuery/#jQuery-element
をご参照ください。

1. 引数に文字列をとる場合$(‘…’) ⇒ セレクタ

html上の要素を取得したいときに使用し、この使い方のことをセレクタと呼びます。例えば、$(‘div’) と記述することで、htmlのdiv要素を取得できます。javascriptの document.getElementsByTagName(‘div’) に対応しますが、以下のように返り値が異なります。

  • $(selector):jQueryオブジェクト
  • getElementByTagName(tagName):HTMLCollection

$(selector) の返り値は、jQueryオブジェクトと呼ばれるものになっており、jQueryで定義された様々な関数を使用できます。以下では、.css() 関数を呼び出しています。

$(…)の … はcssのセレクタとほぼ同じ方法で指定でき、

  • $(‘.boxA’)class=”boxA” の要素を取得
  • $(‘#table-first’)id=”table-first” の要素を取得

となります。それぞれ、document.getElementsByClassNamedocument.getElementById に対応します(もちろん返り値は異なり、$() はjQueryオブジェクト、getElement系はHTMLCollectionやElementを返します)。その他、セレクタの記述方法については、
http://www.hp-stylelink.com/news/2013/11/20131122.php
をご参照ください。

2. 引数にElementをとる場合:$(…) ⇒ jQuery変換

以下のように、getElementById()などで取得したElementを、jQueryの関数が使えるようにjQueryオブジェクトに変換する時に使用することもあります。

.height()は、jQueryで定義された関数で、要素の高さを引数で指定した高さに設定します。これは、jQueryオブジェクトではないと使用できないので、$(elem)によって変換する必要があったのです。

実際には、この使い方はイベントハンドラー内のthisでよく見られます。

thisはその文脈によって参照するオブジェクトが変わりますが、気になる方はhttps://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/this
をご覧ください。

$()の引数にElementが指定されていたら、「この後でjQueryの関数使いたいんだな」と解釈すれば良いと思います。

3. 引数に関数をとる場合:$(function(){…}) ⇒ readyイベント

引数に関数を指定すると、$(document).ready()と同じ意味になります。
readyイベントはHTMLのDOMツリーの読み込み完了時のイベントで、jQueryを使わない場合のDOMContentLoadedイベントと対応します。

以下のように使います。

多くのjQueryのサンプルコードで見かけるので、これを見かけたら、「最初に実行したい処理が書かれているんだな」くらいに思っていただければ良いと思います。

$

$の関数としての使い方については前述しましたが、$単体で以下のように使用することも可能です。

$の後に(…)と引数を記述する部分がない場合、$は関数ではなく、関数をその要素として持つオブジェクトとして解釈できます。jQueryに慣れるまでは、$(…)と$が入り乱れていると、$が関数なのかオブジェクトなのか混乱しますが、両方の使い方があると知っていれば問題ありません。というより、javascriptでは関数もFunctionオブジェクトというオブジェクトです。JavaやC#を初めに学んだ方にとっては衝撃ですが。

$には他にも様々な関数が定義されており、
https://api.jquery.com/category/utilities/
で確認可能です。

実際のコードの解読

ここまで、$の使い方を説明してきましたので、後はjQueryに定義されている関数を都度調べれば、コードの解読、記述が可能です。

実際にプラグインとしてMITライセンスで配布されているshuffleLettersのコードを読み解いて行きましょう。
https://tutorialzine.com/2011/09/shuffle-letters-effect-jquery

click here

以下、実装になります。説明はコメントアウトの部分に書いてあります。なお、コードの理解には、即時実行関数の知識が必要です。

即時実行関数

javascriptでは即時実行関数というものがあります。上記のshuffleLettersでも2箇所使用されています。以下の形になっていれば、即時実行関数です。

() 内で関数を定義し、それをすぐに (実引数) で実行します。
以下に、関数の使用を即時実行関数に書き換える例を示します。

他の箇所で再利用しない関数の場合、このように即時実行関数の書き方をすることで記述量を減らすことができます。
jQueryのプラグインが即時実行関数の形になっているのは、

  • プラグインのjQueryへの登録処理は再利用しないため
  • $の競合を防ぐため

の二つあります。$の競合については、
https://uxmilk.jp/29304
をご覧ください。

まとめ

ここまで解説した通り、jQueryのプログラムはjavascriptにjQueryオブジェクト (= $) が追加されただけのものです。 $の使い方さえ理解していれば簡単なので、あまり身構えず、積極的に使用していただければと思います。

コメントを残す

メールアドレスが公開されることはありません。