エレメント内の子要素を探してくるメソッ

prototype.jsのお勉強がてら、エレメント内の子要素から条件にあったものを探してくるメソッドを書いてみた。

欲しけりゃ持ってけ( ・∀・)!

書いてから気が付いたがElementのprototypeメソッドに$tって名前はなかろう。と思った。

/**
 * $t(tag,obj)
 * エレメント内の子要素を評価関数でtrueを返すものだけを配列で返す
 * エレメント内の子要素をプロパティ比較して同じものだけを配列で返す
 * 
 * @param	string				tag	getElementsByTagNameするタグ名(inputとかaとかpとか)
 * @param	object | function	obj	プロパティオブジェクトまたは評価関数( 型はbool function(element){} )
 * 
 * objがObjectの場合、プロパティ比較を行ってすべてマッチする子要素を返す
 *  ex. $t('input', { type : 'text', size : '20' } );
 * 
 * objがfunctionの場合、obj()の返り値がtrueのもののみ返す(上のexと等価)
 *  ex $t('input', function(s){ return ( s.type=='text' && s.size=20 ) } );
 *  
 * @requires 'prototype.js'(>1.4)
 * 
 */
Element.prototype.$t = function (tag,obj) {
	if(obj){
		if (typeof obj == 'function'){
			return $A(this.getElementsByTagName(tag)).findAll(obj.bind(this));
		} else if ( is_object(obj) ){
			return $A(this.getElementsByTagName(tag)).findAll( function(s){
				return $H(obj).all( function(f){
					return s[f[0]]==f[1];					
				});
			});
		}
	} else {
		return this.getElementsByTagName(tag);
	}
};