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
* \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
} else {\r
newAttrs[ name ] = attrs[ name ] = v;\r
};\r
+ return true;\r
};\r
\r