OSDN Git Service

Version 0.6.23, remove AbstractBox(AbstractDisplayContainer), working ie-filter-fix.
[pettanr/clientJs.git] / 0.6.x / js / dom / 14_XDomAttr.js
index fadd4f9..720155c 100644 (file)
@@ -172,6 +172,9 @@ X.Dom.Attr = {
                checked          : 'defaultChecked'\r
        },\r
        renameForTag : {},\r
+       // http://nanto.asablo.jp/blog/2005/10/29/123294\r
+       // checked -> defaultChecked\r
+       // 動的に生成した input 要素を文書ツリーに挿入する前に設定した checked 属性は反映されず、defaultChecked だと反映される\r
        objToAttrText : function( obj ){\r
                var noValue = X.Dom.Attr.noValue, attrs = [], n = -1, p;\r
                for( p in obj ){\r
@@ -204,44 +207,47 @@ X.Dom.Attr = {
  * \r
  */\r
 X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){\r
-       var attrs, newAttrs, v, name;\r
+       var attrs = this._attrs, newAttrs, f;\r
        \r
        if( this._xnodeType !== 1 ) return this;\r
        \r
        if( nameOrObj && X.Type.isObject( nameOrObj ) ){\r
-               if( !( attrs = this._attrs ) ) attrs = this._attrs = {};\r
-               if( !( newAttrs = this._newAttrs ) ) newAttrs = this._newAttrs = {};\r
+               attrs || ( attrs = this._attrs = {} );\r
+               newAttrs = this._newAttrs || ( this._newAttrs = {} );\r
                \r
                for( p in nameOrObj ){\r
-                       this.__attr( attrs, newAttrs, p, nameOrObj[ p ] );\r
+                       if( this._setAttr( attrs, newAttrs, p, nameOrObj[ p ] ) === true ) f = true;\r
+               };\r
+               if( f ){\r
+                       delete this._attrText;\r
+                       this._dirty |= X.Dom.Dirty.ATTR;\r
+                       this._root && this._reserveUpdate();                    \r
                };\r
-               delete this._attrText; // = X.Dom.Attr.objToAttrText( attrs );\r
-               this._dirty |= X.Dom.Dirty.ATTR;\r
-               this.parent && this._reserveUpdate();\r
                return this;\r
        } else\r
        if( 1 < arguments.length ){\r
                // setter\r
-               if( !( attrs = this._attrs ) ) attrs = this._attrs = {};\r
-               if( !( newAttrs = this._newAttrs ) ) newAttrs = this._newAttrs = {};\r
-               \r
-               this.__attr( attrs, newAttrs, nameOrObj, arguments[ 1 ] );\r
-               delete this._attrText; // = X.Dom.Attr.objToAttrText( attrs );\r
-               this._dirty |= X.Dom.Dirty.ATTR;\r
-               this.parent && this._reserveUpdate();\r
+               if( this._setAttr( attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
+                       delete this._attrText;\r
+                       this._dirty |= X.Dom.Dirty.ATTR;\r
+                       this._root && this._reserveUpdate();\r
+               };\r
                return this;\r
        } else\r
-       if( typeof nameOrObj === 'string' ){\r
+       if( typeof nameOrObj === 'string' && attrs ){\r
                // getter\r
-               if( !attrs ) return;\r
-               \r
-               return attrs[ v ];\r
+               return attrs[ nameOrObj ];\r
        };\r
 };\r
-X.Dom.Node.prototype.__attr = function( attrs, newAttrs, name, v ){\r
+X.Dom.Node.prototype._setAttr = function( attrs, newAttrs, name, v ){\r
        if( name === 'UID' ) return;\r
        if( name === 'id' ){\r
-               this._id = v !== 'ie4uid' + this._uid ? v : undefined;\r
+               v = v !== 'ie4uid' + this._uid ? v : undefined;\r
+               if( v !== this._id ){\r
+                       this._id = v;\r
+                       this._dirty |= X.Dom.Dirty.ID;\r
+                       this._root && this._reserveUpdate();\r
+               };\r
                return;\r
        };      \r
        if( name === 'class' ) return this.className( v );      \r
@@ -261,5 +267,6 @@ X.Dom.Node.prototype.__attr = function( attrs, newAttrs, name, v ){
        } else {\r
                newAttrs[ name ] = attrs[ name ] = v;\r
        };\r
+       return true;\r
 };\r
 \r