OSDN Git Service

Version 0.6.90, performance fix for HTML5Audio & rename SilverLight -> Silverlight.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 17_XDomNodeList.js
1 \r
2 X.Dom.NodeList = function( v ){\r
3         var args = [],\r
4                 l    = arguments.length,\r
5                 i    = 0,\r
6                 indexOf, xnode, j, n = 0, skip;\r
7         for( ; i < l; ++i ){\r
8                 //args.push( arguments[ i ] );\r
9                 args.push.apply( args, arguments[ i ] );\r
10         };\r
11         //alert( arguments[ 0 ].length + ' , ' + args.length )\r
12         if( ( l = args.length ) === 1 ) return new X.Dom.Node( args[ 0 ] );\r
13         if( !this || this.append !== X.Dom.NodeList.prototype.append ) return new X.Dom.NodeList( args );\r
14         \r
15         for( i = 0; i < l; ++i ){\r
16                 xnode = args[ i ];\r
17                 //xnode = xnode && xnode.constructor === X.Dom.Node ? xnode : new X.Dom.Node( xnode );\r
18                 skip  = false;\r
19                 if( xnode._xnodeType === 0 ) continue;\r
20                 for( j = 0; j < n; ++j ){\r
21                         if( this[ j ] === xnode ){\r
22                                 skip = true;\r
23                                 break;\r
24                         };\r
25                 };\r
26                 if( !skip ){\r
27                         this[ n ] = xnode;\r
28                         n = ++this.length;      \r
29                 };\r
30         };\r
31 };\r
32 X.Dom.NodeList.prototype.length = 0;\r
33 \r
34 X.Dom.NodeList.prototype.each = function( func /* opt_args... */ ){\r
35         var l = this.length,\r
36                 i = 0, args;\r
37 \r
38         if( 1 < arguments.length ){\r
39                 args = X.copyArray( arguments );\r
40                 for( ; i < l; ++i ){\r
41                         args[ 0 ] = i;\r
42                         if( func.apply( this[ i ], args ) === false ) break;\r
43                 };\r
44         } else {\r
45                 for( ; i < l; ++i ){\r
46                         if( func.call( this[ i ], i ) === false ) break;\r
47                 };\r
48         };\r
49         return this;\r
50 };\r
51 \r
52 /* --------------------------------------\r
53  *  Fuction Base, multi, getter, setter,\r
54  */\r
55 X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT, function(){\r
56         var target = X.Dom.NodeList.prototype,\r
57                 src    = X.Dom.Node.prototype,\r
58                 p, v, multi;\r
59         for( p in src ){\r
60                 v = src[ p ];\r
61                 if( X.Type.isFunction( v ) && !target[ p ] ){\r
62                         target[ p ] = multi = new Function( [\r
63                                 'var a=arguments,f=X.Dom.Node.prototype.', p, ',t=this,i,l=t.length;',\r
64                                 'if(l)',\r
65                                         'for(i=0;i<l;++i)if(i===l-1)return f.apply(t[i],a);else f.apply(t[i],a);',\r
66                                 'return f.apply(t,a)'\r
67                         ].join( '' ) );\r
68                 };\r
69         };\r
70 });\r
71 \r
72 \r