トップページ >  jQuery >  関数としてのjQuery
初版2011/10/21: 最終更新日2011/10/21
関数としてのjQuery
目次
関数としてのjQuery
ユーザエージェント
配列とオブジェクト操作
検査
文字列操作
相互運用
内部API
関数としてのjQuery

jQueryの使い方は、CSSセレクタを用いて要素を特定するものが一般的です。
しかし、jQueryには関数としての素質も持っています。
Ajax」の「jQuery.ajax」などがその例です。

ユーザエージェント

jQueryはブラウザに依らないスクリプトの構築が可能です。
しかし、それでもブラウザによる情報や挙動も存在します。
jQueryでは、そういった点に関しても情報を提供しています。

jQuery.support
ブラウザごとに異なる機能や、バグによって正常に動かない機能などの情報を返します。
ブラウザごとの機能の違いは、各種調査に基づいています。
以下はエントリーの一部です。
boxModel
ブラウザがW3CのCSS Box Modelに従っていれば、trueを返します。
例えばIE6/7でQuirks Modeを用いている場合、この値はfalseを返します。
この値はdocument.readyが呼ばれる前には常にnullになっています。
cssFloat
floatの値を取得する場合にstyle.cssFloatが使えればtrueを返します。
例えば現時点でのIEではcssFloatではなくstyleFloatを用いるため、falseを返します。
hrefNormalized
hrefの値を取得する際に、属性値をそのまま返す場合はtrueになります。
現時点のIEではURLが標準化されるため、falseが返ります。
htmlSerialize
innerHTMLを用いた際に、serializeされた値を返すならばtrueです。
現時点のIEではfalseが返ります。
leadingWhitespace
innerHTMLで、先頭に空白があった場合にそれを残して返すブラウザであればtrueになります。
IE6~8ではfalseになります。
noCloneEvent
要素をcloneした際に、元の要素が持っていたイベントハンドラも同時にコピーしないブラウザであればtrueになります。
現時点のIEではfalseになります。
objectAll
getElementsByTagName("*")を実行した際に、全ての要素を返す挙動をするブラウザであればtrueになります。
現時点のIEではfalseになります。
opacity
opacityスタイルで透明度を指定する機能を実装しているブラウザであればtrueを返します。
現時点のIEではopacityではなくalpha filterを用いるため、falseになります。
scriptEval
appendChildやcreateTextNodeでdocumentを追加した際に、含まれるscriptを実行するブラウザであればtrueになります。
現時点でのIEはfalseとなり、scriptを実行しながら追加したい場合は.textを用いることになります。
style
getAttribute("style")で要素に記述されたstyle属性値を取得できるブラウザであればtrueを返します。
現時点のIEではfalseとなり、styleではなくcssTextを使います。
tbody
tableタグを用いる際に、tbody要素が無い状態を許可するブラウザであればtrueになります。
現時点のIEではこれが許されておらず、タグ上にtbody要素が無かった場合は自動的に付加されるため、falseとなります。

リスト1. jQuery.support

function Sample21(){
	var str21 = '';
	jQuery.each(jQuery.support, function(key, val){
		str21 = str21 + '\n' + key + '=' + val;;
	});
	alert(str21)
}

実装例

 
jQuery.browser
jQuery.browser.version
jQuery.boxModel
ver.1.3より前の関数で現在はサポートされていません。
配列とオブジェクト操作

jQuery(CSSセレクタ)の結果がjQueryオブジェクトの配列であるように扱われます。
同様に配列やオブジェクトそのものも、jQuery関数を用いて手軽に扱うことができます。

jQuery.each(配列/オブジェクト,コールバック関数)
配列/オブジェクトを問わずに繰り返し処理用の汎用関数です。
この関数は、jQuery().each() とは異なり、引数で渡した単なる配列やjQueryでないオブジェクトも繰り返し操作することができます。
コールバック関数は2つの引数を持ちます。
1番目はオブジェクトであればハッシュキー、配列であればインデックスを受け取ります。
2番目には、値が受け渡されます。
繰り返し処理中にループを抜けたい場合(一般的なループ処理で言うところのbreak)、コールバック関数でfalseを返します。
それ以外の値を返した場合は、無視されます。
返り値:元の配列 または オブジェクト

リスト2. jQuery.support

function Sample32(){
	var num32 = 0;
	jQuery.each([1,2,3,4,5,6,7,8,9], function(){
		num32 = num32 + this
	});
	alert(num32)
}

実装例

1+2+3+4+5+6+7+8+9+10=?

 
jQuery.extend(target, object1, [objectN])
あるオブジェクトに対し、他の1つ以上のオブジェクトのプロパティやメソッドを拡張したものを返します。
これは、「継承」をシンプルに実装してくれます。
 
jQuery.grep(配列,コールバック関数[,invert])
配列中から、フィルタ関数を指定して特定の値だけを残した配列を返します。
コールバック関数は2つの引数を持ちます。
1番目に渡されるのは、配列中の値そのものです。
2番目に渡されるのは、配列のインデックスです。
関数は受け取った値を配列中に残したければtrueを、除去したければfalseを返す必要があります。
但し、grep関数の第三引数のinvertにtrueを指定するとこの動作は逆になり、trueが除去、falseが残す処理になります。
返り値:フィルタリングされた配列

リスト3. jQuery.grep(配列,コールバック関数[,invert])

function Sample33(){
	var arr = jQuery.grep([1,2,3,4,5,6,7,8,9,10], function(src,ind){
		return (src % 3 == 0);
	});
	alert(arr.join(','))
}

実装例

1~10の内、3の倍数は?

 
jQuery.makeArray(オブジェクト)
オブジェクトを、配列に変換します。
対象になるオブジェクトはlengthプロパティを持ち、保持しているプロパティが0からlength-1であるものです。
典型的なものとしてはDOMのHTMLElementsなどが挙げられますが、通常の方法でjQueryを用いていれば特に使う必要は無いはずです。
返り値:配列
 
jQuery.map(配列,コールバック関数)
配列の各値を関数で処理して、新たな配列を作成します。
コールバック関数は2つの引数を持ちます。
1番目に渡されるのは、配列中の値そのものです。
2番目に渡されるのは、配列のインデックスです。
変換後の値として戻り値を返します。
戻り値が、「null」を返すと、スキップします。
返り値:変換された配列

リスト4. jQuery.map(配列,コールバック関数)

function Sample34(){
	var arr0 = [3,2,5,3,6,0,8];
	var arr1 = jQuery.map( arr0, function(src,ind){
		return "ABCDEFGHIJKLMNOPQRSTUVWXYZ".substr(src,1);
	});
	alert(
		arr0.join(',')
		+ '→' +
		arr1.join(',')
	);
}

実装例

数値をアルファベットに変換

 
jQuery.inArray(検査値,配列)
第1引数に渡した値が配列中にあれば、そのインデックスを返します。
例え該当する値が複数あっても、最初に見つかった時点でその値を戻します。
値が配列中に見つからない場合は、-1を返します。
返り値:インデックス(0~の数値)

リスト5. jQuery.inArray(検査値,配列)

function Sample35(){
	var n = Math.floor(Math.random() * 10);
	var map = [3,2,5,3,4,6,8,5,6,2,1,0];
	var res = jQuery.inArray(n,map);
	alert(n + '→' + res);
}

実装例

数値変換

 
jQuery.unique(配列)
配列中から重複している値を除去し、ユニークになったものを返します。
返り値:整理された配列

リスト6. jQuery.unique(配列)

function Sample36(){
	var arr0 = [1,2,4,6,7,4,6,4,2,4,6];
	var str0 = arr0.join(',');
	var arr1 = jQuery.unique(arr0);
	var str1 = arr1.join(',');
	alert(str0 + '→' + str1);
}

実装例

重複チェック

検査

Javascriptでは、配列、オブジェクト、関数は名前での違いがありません。
jQueryには、それらを検査する関数が用意されています。

jQuery.isArray(検査対象)
検査対象が配列であるかどうかを判別します。
返り値:ブール値(配列ならばtrue)

リスト7. jQuery.isArray(検査対象)

function Sample47(){
	var A = [1,2,3];
	var B = {x:1,y:2};
	alert(
		'Aは配列? ' + jQuery.isArray(A) + ' (配列です)'
		+ '\n' +
		'Bは配列? ' + jQuery.isArray(B) + ' (オブジェクトです)'
	);
}

実装例

  1. Aには配列を設定
  2. Bにはオブジェクトを設定
 
jQuery.isFunction(検査対象)
検査対象が関数であるかどうかを判別します。
返り値:ブール値(関数ならばtrue)

リスト8. jQuery.isFunction(検査対象)

function Sample48(){
	var A = [1,2,3];
	var B = {x:1,y:2};
	var C = function(){};
	alert(
		'Aは関数? ' + jQuery.isFunction(A) + ' (配列です)'
		+ '\n' +
		'Bは関数? ' + jQuery.isFunction(B) + ' (オブジェクトです)'
		+ '\n' +
		'Cは関数? ' + jQuery.isFunction(C) + ' (関数です)'
	);
}

実装例

  1. 配列 A = [1,2,3];
  2. オブジェクト B = {x:1,y:2};
  3. 関数 C = function(){};
文字列操作

jQueryには、文字列を操作する関数が用意されています。

jQuery.trim(文字列)
文字列の先頭と末尾から、空白を除去します。
渡された文字列から、正規表現で空白と見なされるものを除去します。
そのため、改行コードや全角のブランクであっても、空白として処理されます。
返り値:文字列

リスト9. jQuery.trim(文字列)

function Sample59(){
	var str = ' foge   foge  ';
	alert(
		'「' + str + '」\n'
		+ 'をトリムすると\n'
		+ '「' + jQuery.trim(str) + '」'
	);
}

実装例

対象となる文字列は、「 foge foge 」

相互運用

jQueryには、エイリアスとして「$」を使うことができます。
例えば「jQuery('#target')」は「$('#target')」と書くことができます。
同様に、上記の「jQuery.trim(str)」も「$.trim(str)」と書けます。

しかし、エイリアス「$」を使うJavascriptライブラリは、jQueryだけではありません。
最も有名なものに、prototype.jsなどがあります。
これらと競合する場合に以下の関数を使い、相互運用します。

jQuery.noConflict([extreme])
この関数を実行すると、$関数の動作が先に定義されている動作に戻します。
noConflictを使った場合、jQueryオブジェクトの呼び出しには明確に'jQuery'と書く必要があります。
第1引数 extreme (ブール値) を true とすると、$関数のみならず、jQueryオブジェクトも含めて完全にグローバルの名前空間から除去します。
これを設定すると、$関数だけでなくjQueryオブジェクトも、先に定義された動作に戻してしまいます。

リスト10. jQuery.noConflict([extreme])

jQuery.noConflict();
// jQueryは、そのままに動作する
jQuery("div p").hide();
// $関数はjQueryとしてではなく、他のライブラリで定義された$関数として動作する
$("content").style.display = 'none';
内部API

以下は、実際にはjQueryの内部で扱うためのAPIです。

データキャッシュ
jQuery.data(要素[,name[,value]])
第1引数のみを指定すると、要素ごとに一意にふられたIDを返します。
一連のdata APIの処理中で必要に応じて呼ばれ、その際に自動的にIDを割り振ります。
このAPIが返すIDは、いわゆる(X)HTMLが持つID属性とは全く別のものです。
指定するものではなく、あくまで内部的に要素をユニークに指定するためのものです。
ここで指定する要素は、あくまでDOMの要素です。
第2引数 name を指定すると、要素に関連付けられた、指定された名前の値を返します。
第3引数 value を指定すると、要素に関連づけた値を設定します。
プラグインで要素に固有の値を持たせる場合、コンフリクトしないようにプラグイン名を用いて、オブジェクトでデータを保持するなどに適します。

リスト11. jQuery.data(要素[,name[,value]])

var obj = jQuery.data( jQuery('#id').get(0), 'your_plugin_name', your_plugin_value );
 
jQuery.removeData(要素[,name])
対象要素に関連付けられたデータを削除します。
第2引数を指定しない場合、すべてのデータが削除されます。
第2引数を指定した場合、nameに対応したデータが削除されます。

リスト12. jQuery.removeData(要素[,name])

jQuery.data( jQuery('#id').get(0), 'your_plugin_name);
Ajax
jQuery.param(オブジェクト)
form要素やオブジェクトの値をシリアライズします。
この関数はserializeメソッドのコアにあたるものです。
単体でも使えます。

リスト12. jQuery.param(オブジェクト)

function Sample712(){
	var obj = { x:1, y:2, name:'リスト12'};
	alert(jQuery.param(obj));
}