} else {\r
if( 1 < arguments.length ) return new X.Dom.NodeList( arguments );\r
if( X.Type.isArray( v ) && v.length ) return new X.Dom.NodeList( v );\r
- if( !this || this.append !== Node.prototype.append ) return new Node( v );\r
- \r
+ //if( !this || this.append !== Node.prototype.append ){\r
+ // return new Node( v );\r
+ //};\r
switch( Node._getType( v ) ){\r
case Node.IS_XNODE :\r
case Node.IS_XNODE_LIST :\r
}; \r
if( v.constructor === Node ) return Node.IS_XNODE;\r
if( v.constructor === X.Dom.NodeList ) return Node.IS_XNODE_LIST;\r
- if( v.tagName ) return Node.IS_RAW_HTML;\r
+ if( X.Type.isHTMLElement( v ) ) return Node.IS_RAW_HTML;\r
if( v.nodeType === 3 ) return Node.IS_RAW_TEXT;\r
if( typeof v === 'string' ){\r
return '<' === v.charAt( 0 ) && v.charAt( v.length - 1 ) === '>' ? Node.IS_HTML_STRING : Node.IS_STRING;\r
Node.prototype.html = function( html ){\r
var _ = '', q = '"', xnodes, n, i, l;\r
// setter\r
- if( X.Type.isString( html ) ){\r
+ if( html !== undefined ){ // String 以外に Number や false null なども許可\r
if( this._xnodeType === 3 ) return this.text( html );\r
return html ? this.empty().append.apply( this, X.Dom.parse( html, true ) ) : this.empty();\r
};\r
return this._text;\r
};\r
\r
-Node.prototype.each = function( func ){\r
- func.call( this, 0 );\r
+/*\r
+ * HTML要素に対して name の関数を実行しその戻り値を返す。関数に渡す引数も任意に設定できる。\r
+ */\r
+Node.prototype.call = function( name /*, opt_args... */ ){\r
+ var raw = this._rawNode || this._ie4getRawNode && this._ie4getRawNode(),\r
+ l = arguments.length - 1,\r
+ func, args, params, i;\r
+ if( !raw ) return;\r
+ func = raw[ name ];\r
+ if( X.Type.isFunction( func ) ){\r
+ if( l ){\r
+ args = X.copyArray( arguments );\r
+ args.shift();\r
+ return func.apply( raw, args );\r
+ };\r
+ return raw[ name ](); \r
+ } else\r
+ if( X.Type.isUnknown( func ) ){\r
+ // typeof func === unknown に対策\r
+ // http://la.ma.la/blog/diary_200509031529.htm \r
+ if( l ){\r
+ args = X.copyArray( arguments );\r
+ args.shift();\r
+ \r
+ params = [];\r
+ for( i = 0; i < l; ++i ){\r
+ params[ i ] = '_' + i;\r
+ };\r
+ params = params.join( ',' );\r
+ return Function(\r
+ params,\r
+ [ 'return this.', name, '(', params, ')' ].join( '' )\r
+ ).apply( raw, args );\r
+ };\r
+ return raw[ name ]();\r
+ };\r
+};\r
+\r
+/*\r
+ * xnode を this として関数を実行する。 NodeList.each と動作を合わせてあるため関数の戻り値は破棄される。\r
+ * 関数に渡す引数も任意に設定できる。\r
+ */\r
+Node.prototype.each = function( func /*, opt_args */ ){\r
+ var args;\r
+ if( 1 < arguments.length ){\r
+ args = X.copyArray( arguments );\r
+ args[ 0 ] = 0; \r
+ func.apply( this, args );\r
+ } else {\r
+ func.call( this, 0 );\r
+ };\r
return this;\r
};\r
\r