jQuery.jsを読み解くの連載も今回で第4回となりました。
本題に入る前に少々豆知識です。jQueryは軽量なライブラリだと言われていますが、実際のところはどうなのでしょうか。ソースコードの行数をprototype.jsと比較してみると、prototype.jsの3,277行に対して、jQuery 1.2.2は3,383行です。ちょっと意外ですが、実はjQueryのほうが行数でみると多かったりします。行数が多いからといって高機能とはいえませんが、ライブラリを選択する際の参考にしてみてください。
それでは、さっそく続きのコードを見ていきましょう。
swap()
jQuery.swapメソッドは、要素の大きさなどの属性を取得する際に、一時的に値を変更するための内部処理用メソッドです。次に説明するcssメソッドから利用されます。動作としては、774行目のfor文で古い値を保存しておいてから、引数optionsで渡された値に変更します。そして、779行目で引数として指定されたcallbackメソッドを実行します。最後に782行目のfor文で、属性を保存しておいた値に戻して完了です。
css()
jQuery.cssメソッドは、選択された要素のスタイル属性値を取得するためのメソッドです。787行目にあるように"width"と"height"の値を取得したい場合だけ少し挙動が異なります。この2つの値を取得する場合で、対象となる要素がvisibility:"hidden", display:"none"など不可視状態の場合、先ほど説明したjQuery.swap()を呼び出して一時的にvisibility:"hidden", display:"block"の状態を作り出しています。こうしておいてから、790行目の関数getWH()で値を算出します。
また、"width"と"height"以外の値を取得する場合は、次に説明するjQuery.curCSS()を実行します(808行目)。
curCSS()
jQuery.curCSSメソッドは、CSSの属性値を取得します。Internet ExplorerやFirefox、Operaといったブラウザごとの解釈の違いに対する対策が随所に見られます。cssのクロスブラウザに対する処理をまとめている部分となります。
815行目は、Safariブラウザでcolorの値がうまく取得できない時にtrueを返す関数です。後で処理を切替える判定条件として利用されます。
824行目は、Internet Explorerでopacityを取得した際の挙動を他のブラウザと合わせるための処理です。
832行目は、Operaがときどき間違ったdisplay値を返す問題への対応です。不思議なことにdisplay値を設定し直すことで解消するようです。
838行目は、float値を取得する際にIEだけプロパティ名が異なるための処理です。styleFloatは1206行目で定義されていて、IEの場合はstyleFloatを利用します。
forceがfalseか指定されていない場合は、そのまま取得した結果を返します。
IEにはdocument.defaultView.getComputedStyleがないため、ここはIE以外で行われる処理になります。848~851行目は、属性名の正規化を行います。例えば、floatが含まれるものをfloatに統一したり、"paddingTop"を正規表現で"padding-top"にしたりします。次に855行目ですが、getComputedStyleが、利用可能で先ほどのcolor()の結果がfalseならば(Safariの問題が発生しなければ)、getPropertyValueを使って値を取得します。
860行目以降はSafariが適切な値を返さない場合の処理で、親要素でdisplay:hiddenなものを一度display属性値をblockに設定してから値を取得しています。
891行目からはIEの場合の処理です。
892行目は先ほどの属性名の変更とは逆で、"padding-top"を"paddingTop"形式に変更します。そして、currentStyleを使って属性値を取得します。
903行目以降は、ピクセル指定以外の数値をピクセル単位で取得する処理です。IEのみでJavaScriptからruntimeStyle属性を上書き可能な性質を利用して、値をleftに設定してpixelLeftを取得することでピクセル値を算出します。
clean()