OSDN Git Service

Version 0.6.23, remove AbstractBox(AbstractDisplayContainer), working ie-filter-fix.
[pettanr/clientJs.git] / 0.6.x / js / dom / 18_XDomQuery.js
index a16d089..3d9cdb2 100644 (file)
@@ -206,19 +206,21 @@ X.Dom.Query._parse = function( query, last ){
 \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
@@ -231,7 +233,7 @@ X.Dom.Query._parse = function( query, last ){
                \r
                // 以下、パースと探索\r
                for( ; queryString.length; ){\r
-                       console.log( 'queryString[' + queryString + ']' + queryString.length );\r
+                       console.log( 'queryString[' + queryString + ']' );\r
                        \r
                        // 初期化処理\r
                        if( !parsed ){\r
@@ -258,8 +260,6 @@ X.Dom.Query._parse = function( query, last ){
                                };\r
                        };\r
                        \r
-\r
-                       \r
                        combinator  = parsed[ 0 ];\r
                        selector    = parsed[ 1 ];\r
                        name        = parsed[ 2 ];\r
@@ -324,7 +324,7 @@ X.Dom.Query._parse = function( query, last ){
                                        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
@@ -367,11 +367,13 @@ X.Dom.Query._parse = function( query, last ){
                                        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
@@ -398,13 +400,16 @@ X.Dom.Query._parse = function( query, last ){
                                        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
@@ -414,7 +419,7 @@ X.Dom.Query._parse = function( query, last ){
                                                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
@@ -427,7 +432,7 @@ X.Dom.Query._parse = function( query, last ){
                                                                //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
@@ -439,7 +444,7 @@ X.Dom.Query._parse = function( query, last ){
                                                                                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