OSDN Git Service

Version 0.6.70, bugfix.
[pettanr/clientJs.git] / 0.6.x / js / 01_dom / 11_XDomNode.js
index e92d637..ec7a949 100644 (file)
@@ -90,8 +90,9 @@ X.Dom.Node = X.EventDispatcher.inherits(
                        } 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
@@ -184,7 +185,7 @@ Node._getType = function( v ){
        };      \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
@@ -758,7 +759,7 @@ Node._outerFlag = null;
 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
@@ -825,8 +826,57 @@ Node.prototype.text = function( text ){
        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