-/**\r
+/*\r
* Original code by ofk ( kQuery, ksk )\r
* http://d.hatena.ne.jp/ofk/comment/20090106/1231258010\r
* http://d.hatena.ne.jp/ofk/20090111/1231668170 \r
// TODO { a : 1, A : 2, _ : 3,,, }\r
X_Node_Selector__ALPHABET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-0123456789\\',\r
X_Node_Selector__NUMBER = '+-0123456789';\r
-\r
-// XMLWrapper のために今だけ外部に公開\r
-X_NodeSelector_parse = X_Node_Selector__parse;\r
\r
/*\r
* セレクタ文字列の解析、但し一挙に行わず、ひと塊づつ\r
return not ? [ i + tmp + 1, [ combinator, 6, result ] ] : [ i, result ];\r
};\r
\r
- // セレクター\r
- X[ 'Doc' ][ 'find' ] = X_shortcutFunction = Node.prototype[ 'find' ] = X_NodeList.prototype[ 'find' ] = function ( queryString ){\r
+ /**\r
+ * selector を使って Node, NodeList を取得する\r
+ * @alias X.Doc.find\r
+ * @function\r
+ * @param {string} セレクター文字列\r
+ * @return {Node|NodeList}\r
+ */\r
+ X[ 'Doc' ][ 'find' ] = X_shortcutFunction =\r
+ /**\r
+ * selector を使って Node, NodeList を取得する\r
+ * @alias Node.prototype.find\r
+ * @function\r
+ * @param {string} セレクター文字列\r
+ * @return {Node|NodeList}\r
+ */\r
+ Node.prototype[ 'find' ] =\r
+ /**\r
+ * selector を使って Node, NodeList を取得する\r
+ * @alias NodeList.prototype.find\r
+ * @function\r
+ * @param {string} セレクター文字列\r
+ * @return {Node|NodeList}\r
+ */\r
+ X_NodeList.prototype[ 'find' ] = function ( queryString ){\r
var HTML = X_Node_html,\r
scope = this.constructor === X_NodeList && this.length ? this : [ this.constructor === Node ? this : X_Node_body ],\r
parents = scope, // 探索元の親要素 XNodeList の場合あり\r
};\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