jQuery Advent Calendar 2013の20日目の記事になります。衝動的にエントリーしてしまいましたが、意外とネタがありません。しばらく『サイ本』をパラパラと捲っておりました。その中で何となく目についたjQueryのユーティリティ関数のことでも書いてみることにします。ただユーティリティ関数のこと全部書くと膨大な量になりそうなので、プラグインなどの開発の際のデバッグ時に使いたいjQueryのユーティリティ関数に絞ってまとめてみます。
ブラウザテスト用
jQuery.browser
ブラウザのベンダとバージョンを示すプロパティ。ブラウザがIEの場合、msieプロパティがtrueになります。Safari、Chromeの場合はwebkitプロとティがtrueになり、Firefoxの場合はmozillaプロパティがtrueになり、Operaの場合はoperaプロパティがtrueになります。また、versionプロパティには、ブラウザのバージョン番号が格納されます。
便利なjQuery.browserプロパティですが、UserAgentの偽装が簡単にできてしまうということもあり、残念ながらjQuery1.9で削除されています。代わりに以下で紹介するjQuery.supportを使用するか、jQuery Migrate pluginを読み込んで使用する必要があります。
jQuery.support
jQuery.browserはnavigator.userAgentの値によってブラウザの判別を行うプロパティでしたが、jQuery.supportはブラウザのサポートする機能やバグを示すプロパティとなります。機能を実装する際に、プラウザの種類やバージョンによって実装を考えるというより、ブラウザのサポートする機能に基づいて実装を考えることの方がより現実的ということから、jQuery.supportプロパティの使用が推奨されるようになった模様です。
試しに、Chrome 31.0.1650.63で$.supportしてみたところ以下のような結果となりました。
jQuery.supportに含まれるテストの一覧とその詳細は以下をご確認ください。
なお、jQuery.supportのプロパティの多くは、jQuery内部で使われる低レベルの情報であり、公式ドキュメントではjQuery.supportを利用する代わりに、 Modernizrのような別のライブラリの利用を薦めています。
各種検証用
jQuery.contains(a, b)
ドキュメント要素aが要素bを含む場合のみtrueを返します。
jQuery.isArray(obj)
引数objがArrayオブジェクトである場合のみtrueを返します。
jQuery.isEmptyObject(obj)
引数objに列挙可能なプロパティが存在しない場合のみtrueを返します。
jQuery.isFunction(obj)
引数objがFunctionオブジェクトである場合のみtrueを返します。
jQuery.isPlainObject(obj)
引数objが特化型やオブジェクトクラスのインスタンスではなく、オブジェクトリテラルで生成された「プレーン」なオブジェクトの場合のみtrueを返します。
jQuery.isXMLDoc(obj)
引数objがXMLドキュメントかXMLドキュメントの要素である場合のみtrueを返します。
その他
jQuery.error(msg)
引数msgを含む例外を発行します。この関数はプラグインから呼び出すこともできれば、デバッグ時にオーバーライドすることもできます(例えば、$.error = alertなど)。
jQuery.noConflict()
prototype.jsなど別のJavaScriptライブラリと一緒にjQueryを使う場合、「$」が競合してエラーとなる場合があります。jQuery.noConflict()は、jQueryをロードする前に「$」を値に戻し、jQueryを返します。そうすることで別のライブラリに「$」を譲り渡すことができます。
なお、.ready()メソッドに指定するコールバック関数の引数に「$」を渡すことで、そのコールバック関数の中では「$」を使うことができるようになります。
また、使用する機会はほとんどないと思いますが、引数にtrueを指定することで、「jQuery」についても値に戻し破棄することができます。
今回紹介したユーティリティ関数は、jQueryということでほぼ全てのブラウザで同じように動作します。なのでデバッグにも十分使えるものと思います。特にjQueryプラグインの開発時には使いたいところです。今回の内容については、主に以下の書籍を参考にしています。
以上でjQuery Advent Calendar 2013 20日目の記事は終わります。明日の21日目はshinichi.kogisoさんとなります。
コメント