\r
// セレクター\r
X.Dom.find = X._shortcut = Node.prototype.find = function( queryString ){\r
- var scope = this.cnstructor === X.Dom.NodeList && this.length ? this : [ this.cnstructor === Node ? this : Node.root ],\r
+ var scope = this.cnstructor === X.Dom.NodeList && this.length ? this : [ this.cnstructor === Node ? this : Node.root ],\r
+ parents = scope, // 探索元の親要素\r
noLower = 'title id name class for href src',\r
ARY_PUSH = Array.prototype.push,\r
ret = [], // 結果要素\r
root = X.Dom.Node.getRoot( scope[ 0 ] ),\r
isXML = !!X.Dom.Node.isXmlDocument( root ),\r
- isMulti = 1 < scope.length,// 要素をマージする必要がある\r
- parents = scope, // 探索元の親要素\r
+ isMulti = 1 < scope.length,\r
+ isStart = true,// 要素をマージする必要がある\r
+ _ = ' ',\r
+ isAll, isNot,\r
l, i, n, parsed,\r
xnodes, // 一時保存用\r
merge, // 要素がコメントノードで汚染されている場合使う\r
- combinator, selector, name, tagName, \r
- isAll, isStart = true, isNot,\r
+ combinator, selector, name, tagName,\r
uid, tmp, xnode, filter, key, op, val, toLower, useName,\r
links, className, attr, flag;\r
\r
\r
// 以下、パースと探索\r
for( ; queryString.length; ){\r
- console.log( 'queryString[' + queryString + ']' + queryString.length );\r
+ console.log( 'queryString[' + queryString + ']' );\r
\r
// 初期化処理\r
if( !parsed ){\r
};\r
};\r
\r
-\r
- \r
combinator = parsed[ 0 ];\r
selector = parsed[ 1 ];\r
name = parsed[ 2 ];\r
break;\r
\r
default :\r
- if( combinator === 1 || isStart ){\r
+ if( combinator === 1 || ( isStart && selector < 7 ) ){\r
console.log( l + ' > ' + xnodes.length + ' tag:' + tagName );\r
for( ; i < l; ++i ){\r
xnode = parents[ i ];\r
xnodes = [ Node._html ]; break;\r
// link\r
case 9 :\r
- if( links = root._rawNode.links ){\r
+ if( links = document.links ){\r
for( xnodes = [], i = links.length; i; ){\r
xnodes[ --i ] = new Node( links[ i ] );\r
};\r
- };\r
+ } else {\r
+ // area[href],a[href]\r
+ }\r
};\r
\r
if( filter && xnodes.length ){\r
tmp = [];\r
key = filter[ 0 ];\r
op = filter[ 1 ];\r
- val = filter[ 2 ]; \r
+ val = filter[ 2 ];\r
+ \r
+ key = X.Dom.Attr.renameForTag[ key ] || key;\r
+ \r
// [class~='val']\r
if( !isXML && key === 'class' && op === 3 ){\r
- val = ' ' + val + ' ';\r
+ val = _ + val + _;\r
for( i = 0, n = -1; xnode = xnodes[ i ]; ++i ){\r
className = xnode._className;\r
- if( !!( className && ( ' ' + className + ' ' ).indexOf( val ) > -1 ) ^ isNot ) tmp[ ++n ] = xnode;\r
+ if( !!( className && ( _ + className + _ ).indexOf( val ) > -1 ) ^ isNot ) tmp[ ++n ] = xnode;\r
};\r
} else {\r
// 通常\r
useName = X.UA.IE && key !== 'href' && key !== 'src';\r
toLower = !!val && !isXML && noLower.indexOf( key ) === -1; //!noLower.test(key);\r
if( toLower ) val = val.toLowerCase();\r
- if( op === 3 ) val = ' ' + val + ' ';\r
+ if( op === 3 ) val = _ + val + _;\r
\r
for( i = 0, n = -1, l = xnodes.length; i < l; ++i ){\r
xnode = xnodes[ i ];\r
//useName ?\r
// elem[ X.Dom.Attr.renameForDOM[ key ] || key ] :\r
// elem.getAttribute( key, 2 );\r
- flag = attr != null && ( !useName || attr !== '' );\r
+ flag = attr != null;// && ( !useName || attr !== '' );\r
if( flag && op ){\r
if( toLower ) attr = attr.toLowerCase();\r
\r
flag = attr !== val;\r
break;\r
case 3: // ~=\r
- flag = ( ' ' + attr + ' ' ).indexOf( val ) !== -1;\r
+ flag = ( _ + attr + _ ).indexOf( val ) !== -1;\r
break;\r
case 4: // ^=\r
flag = attr.indexOf( val ) === 0;\r