18 'class' : 'className',
\r
19 accesskey : 'accessKey',
\r
20 'accept-charset' : 'acceptCharset',
\r
21 bgcolor : 'bgColor',
\r
22 cellpadding : 'cellPadding',
\r
23 cellspacing : 'cellSpacing',
\r
26 codebase : 'codeBase',
\r
27 codetype : 'codeType',
\r
28 colspan : 'colSpan',
\r
29 datetime : 'dateTime',
\r
31 frameborder : 'frameBorder',
\r
32 'http-equiv' : 'httpEquiv',
\r
34 longdesc : 'longDesc',
\r
35 maxlength : 'maxLength',
\r
37 readonly : 'readOnly',
\r
38 rowspan : 'rowSpan',
\r
39 tabindex : 'tabIndex',
\r
41 valuetype : 'valueType',
\r
42 checked : 'defaultChecked'
\r
52 // http://nanto.asablo.jp/blog/2005/10/29/123294
\r
53 // checked -> defaultChecked
\r
54 // 動的に生成した input 要素を文書ツリーに挿入する前に設定した checked 属性は反映されず、defaultChecked だと反映される
\r
56 objToAttrText : function( obj ){
\r
57 var noValue = X.Dom.Attr.noValue,
\r
58 attrs = [ '' ], n = 0, p, v;
\r
59 if( !obj ) return ''; // Opera7
\r
62 if( p === 'value' ){
\r
63 v = v.split( '"' ).join( '"' ).split( '>' ).join( '>' ).split( '<' ).join( '<' );
\r
65 attrs[ ++n ] = noValue[ p ] ? p : [ p, '="', v, '"' ].join( '' );
\r
67 return 0 < n ? attrs.join( ' ' ) : '';
\r
71 (function( renameForDOM, renameForTag ){
\r
73 for( name in renameForDOM ){
\r
74 renameForTag[ renameForDOM[ name ] ] = name;
\r
76 })( X.Dom.Attr.renameForDOM, X.Dom.Attr.renameForTag );
\r
80 /* --------------------------------------
\r
82 * X.Dom.Attr.toIndex に定義されている 属性の場合
\r
84 * http://nanto.asablo.jp/blog/2005/10/29/123294
\r
85 * className, onclick等 はここで設定しない
\r
88 X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){
\r
89 var attrs = this._attrs, newAttrs, f, p, elm, v;
\r
91 if( this._xnodeType !== 1 ) return this;
\r
93 if( nameOrObj && X.Type.isObject( nameOrObj ) ){
\r
94 attrs || ( attrs = this._attrs = {} );
\r
95 newAttrs = this._newAttrs || ( this._newAttrs = {} );
\r
97 for( p in nameOrObj ){
\r
98 if( this._setAttr( attrs, newAttrs, p, nameOrObj[ p ] ) === true ) f = true;
\r
101 this._attrText = false;
\r
102 this._dirty |= X.Dom.Dirty.ATTR;
\r
103 this._root && this._reserveUpdate();
\r
107 if( 1 < arguments.length ){
\r
109 if( this._setAttr( attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){
\r
110 this._attrText = false;
\r
111 this._dirty |= X.Dom.Dirty.ATTR;
\r
112 this._root && this._reserveUpdate();
\r
116 if( typeof nameOrObj === 'string' ){
\r
118 switch( nameOrObj ){
\r
123 return this._className;
\r
129 return this.cssText();
\r
131 case 'selectedIndex' :
\r
132 if( X.Dom.Attr.HAS_VALUE[ this._tag ] ){
\r
133 if( this._newAttrs && X.inObject( nameOrObj, this._newAttrs ) ) return this._newAttrs[ nameOrObj ];
\r
134 if( elm = X.Dom.DOM_IE4 ? this._rawNode || this._ie4getRawNode() : this._rawNode ){
\r
135 attrs[ nameOrObj ] = elm[ nameOrObj ]; // getAttribute( nameOrObj )?
\r
137 return attrs[ nameOrObj ];
\r
141 return attrs && attrs[ X.Dom.Attr.renameForTag[ nameOrObj ] || nameOrObj ];
\r
144 X.Dom.Node.prototype._setAttr = function( attrs, newAttrs, name, v ){
\r
145 if( name === 'UID' ) return;
\r
146 if( name === 'id' ){
\r
147 v = ( v !== 'ie4uid' + this._uid ) ? v : undefined;
\r
148 if( v !== this._id ){
\r
150 this._dirty |= X.Dom.Dirty.ID;
\r
151 this._root && this._reserveUpdate();
\r
155 if( name === 'class' ) return this.className( v );
\r
156 if( name === 'style' ) return this.cssText( v );
\r
158 if( name.indexOf( 'on' ) === 0 ){
\r
159 X.Notification.warn( 'xnode.attr("' + name + '") is wrong, xnode.listen() & xnode.unlisten().' );
\r
163 name = X.Dom.Attr.renameForTag[ name ] || name;
\r
164 if( attrs[ name ] === v ) return;
\r
167 newAttrs[ name ] = undefined;
\r
168 if( attrs.hasOwnProperty( name ) ) delete attrs[ name ];
\r
170 newAttrs[ name ] = attrs[ name ] = v;
\r