};\r
//console.log( l + ' > ' + xnodes.length + ' tag:' + tagName );\r
merge = {};\r
- for( ; i < l; ++i ){\r
- xnode = parents[ i ];\r
- xnode[ '_xnodes' ] && xnode[ '_xnodes' ].length && X_Node_Selector__fetchElements( xnodes, xnode, isAll ? '' : tagName, merge );\r
- };\r
+ X_Node_Selector__fetchElements( xnodes, parents, isAll ? '' : tagName, merge );\r
//console.log( l + ' >> ' + xnodes.length + ' tag:' + tagName );\r
};\r
};\r
};\r
};\r
};\r
- \r
- function X_Node_Selector__fetchElements( list, parent, tag, merge ){\r
- var xnodes = parent[ '_xnodes' ],\r
- l = xnodes.length,\r
+\r
+ function X_Node_Selector__fetchElements( list, xnodes, tag, merge ){\r
+ var l = xnodes.length,\r
i = 0,\r
- child, uid;\r
+ child, uid, _tag, _xnodes;\r
for( ; i < l; ++i ){\r
child = xnodes[ i ];\r
uid = child[ '_uid' ];\r
- if( !merge[ uid ] && child[ '_tag' ] ){\r
+ _tag = child[ '_tag' ];\r
+ if( !merge[ uid ] && _tag ){\r
merge[ uid ] = true;\r
- ( !tag || child[ '_tag' ] === tag ) && ( list[ list.length ] = child );\r
- child[ '_xnodes' ] && X_Node_Selector__fetchElements( list, child, tag, merge );\r
+ ( !tag || tag === _tag ) && ( list[ list.length ] = child );\r
+ if( ( _xnodes = child[ '_xnodes' ] ) && ( 1 < _xnodes.length || ( _xnodes[ 0 ] && _xnodes[ 0 ][ '_tag' ] ) ) ){\r
+ X_Node_Selector__fetchElements( list, _xnodes, tag, merge );\r
+ };\r
};\r
};\r
};\r
-\r
+/*\r
+ function X_Node_Selector__fetchElements( list, parent, tag, merge ){\r
+ \r
+ var xnodes = parent[ '_xnodes' ],\r
+ memory = {\r
+ i : 0,\r
+ l : xnodes.length,\r
+ xnodes : xnodes\r
+ }, \r
+ memories = [ memory ],\r
+ i, l, xnode,\r
+ uid, _xnodes;\r
+ \r
+ while( memories.length ){\r
+ memory = memories.pop();\r
+ xnodes = memory.xnodes;\r
+ i = memory.i;\r
+ l = memory.l;\r
+ for( ; i < l; ++i ){\r
+ xnode = xnodes[ i ];\r
+ uid = xnode[ '_uid' ];\r
+ if( !merge[ uid ] && xnode[ '_tag' ] ){\r
+ if( !tag || xnode[ '_tag' ] === tag ) list[ list.length ] = xnode;\r
+ \r
+ if( _xnodes = xnode[ '_xnodes' ] ){\r
+ if( 1 < _xnodes.length || ( _xnodes[ 0 ] && _xnodes[ 0 ][ '_tag' ] ) ){\r
+ memory.i = i + 1;\r
+ memory.l = l;\r
+ memory.xnodes = xnodes;\r
+ memories[ memories.length ] = memory;\r
+ memories[ memories.length ] = {\r
+ i : 0,\r
+ l : _xnodes.length,\r
+ xnodes : _xnodes\r
+ };\r
+ merge[ uid ] = true;\r
+ break;\r
+ };\r
+ };\r
+ };\r
+ merge[ uid ] = true;\r
+ };\r
+ };\r
+ };\r
+ */\r
function X_Node_Selector__funcSelectorChild( type, flag_all, flags, xnodes ){\r
var res = [],\r
flag_not = flags.not,\r
return res;\r
};\r
function X_Node_Selector__funcSelectorNth( pointer, sibling, flag_all, flags, xnodes, a, b ){\r
- var _data = funcData,\r
- res = [],\r
+ var res = [],\r
checked = {},\r
flag_not = flags.not,\r
i = 0, n = -1, uid,\r