OSDN Git Service

Version 0.6.60, fix X.Timer for iOS.
[pettanr/clientJs.git] / 0.6.x / js / dom / 17_XDomNodeList.js
index 8f98950..d55d60b 100644 (file)
@@ -3,47 +3,61 @@ X.Dom.NodeList = function( v ){
        var args = [],\r
                l    = arguments.length,\r
                i    = 0,\r
-               indexOf, xnode;\r
+               indexOf, xnode, j, n = 0, skip;\r
        for( ; i < l; ++i ){\r
+               //args.push( arguments[ i ] );\r
                args.push.apply( args, arguments[ i ] );\r
        };\r
+       //alert( arguments[ 0 ].length + ' , ' + args.length )\r
        if( ( l = args.length ) === 1 ) return new X.Dom.Node( args[ 0 ] );\r
-       if( !this || this.append !== Node.prototype.append ) return new X.Dom.NodeList( args );\r
+       if( !this || this.append !== X.Dom.NodeList.prototype.append ) return new X.Dom.NodeList( args );\r
        \r
-       this.__ = { type : 2 };\r
-       indexOf = Array.prototype.indexOf;\r
        for( i = 0; i < l; ++i ){\r
                xnode = args[ i ];\r
-               xnode = xnode && xnode.constructor === X.Dom.Node ? xnode : new X.Dom.Node( xnode );\r
-               if( xnode._xnodeType !== 0 && indexOf.call( this, xnode ) === -1 ){\r
-                       this[ this.length ] = xnode;\r
-                       ++this.length;\r
+               //xnode = xnode && xnode.constructor === X.Dom.Node ? xnode : new X.Dom.Node( xnode );\r
+               skip  = false;\r
+               if( xnode._xnodeType === 0 ) continue;\r
+               for( j = 0; j < n; ++j ){\r
+                       if( this[ j ] === xnode ){\r
+                               skip = true;\r
+                               break;\r
+                       };\r
+               };\r
+               if( !skip ){\r
+                       this[ n ] = xnode;\r
+                       n = ++this.length;      \r
                };\r
        };\r
 };\r
 X.Dom.NodeList.prototype.length = 0;\r
 \r
+X.Dom.NodeList.prototype.each = function( func ){\r
+       var l = this.length,\r
+               i = 0;\r
+       for( i = 0, l = this.length; i < l; ++i ){\r
+               if( func.call( this[ i ], i ) === false ) break;\r
+       };\r
+       return this;\r
+};\r
+\r
 /* --------------------------------------\r
  *  Fuction Base, multi, getter, setter,\r
  */\r
-(function(){\r
+X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT, function(){\r
        var target = X.Dom.NodeList.prototype,\r
                src    = X.Dom.Node.prototype,\r
                p, v, multi;\r
-\r
        for( p in src ){\r
                v = src[ p ];\r
-               if( typeof v === 'funciton' && !target[ p ] ){\r
+               if( X.Type.isFunction( v ) && !target[ p ] ){\r
                        target[ p ] = multi = new Function( [\r
-                               'function functionBase(){',\r
-                                       'var a=arguments,s=a.callee,f=s.f,t=this,i,l=t.length;',\r
-                                       'if(0<l){',\r
-                                               'for(i=0;i<l;++i)if(i===l-1)return f.apply(t[i],a)else f.apply(t[i],a);',\r
-                                       '}',\r
-                                       'return f.apply(t,a)',\r
-                               '}'                     \r
-                       ].join( '' ));\r
-                       multi.f = src[ p ];\r
+                               'var a=arguments,f=X.Dom.Node.prototype.', p, ',t=this,i,l=t.length;',\r
+                               'if(l)',\r
+                                       'for(i=0;i<l;++i)if(i===l-1)return f.apply(t[i],a);else f.apply(t[i],a);',\r
+                               'return f.apply(t,a)'\r
+                       ].join( '' ) );\r
                };\r
        };\r
-})();\r
+});\r
+\r
+\r