INPUT : true,\r
TEXTAREA : true,\r
SELECT : true,\r
- BUTTON : true\r
+ BUTTON : true,\r
+ OBJECT : true,\r
+ PARAM : true // FlashVars が flash 側から書き換えられるケースがある??\r
+},\r
+\r
+// <input type=button,hidden,submit,reset,radio,checkbox> の場合、value の値はユーザーで変えることはない\r
+// <input type=text,password,file> はユーザーによって常に変更される HTML5 ではこれにさらにいろいろ加わる\r
+X_Node_Attr_STATIC_VALUE_TYPES = {\r
+ button : true,\r
+ hidden : true,\r
+ submit : true,\r
+ reset : true,\r
+ radio : true,\r
+ checkbox : true\r
},\r
\r
X_Node_Attr_renameForTag = {};\r
// 先頭にスペース\r
function X_Node_Attr_objToAttrText( obj ){\r
var noValue = X_Node_Attr_noValue,\r
- attrs = [ '' ], n = 0, p, v;\r
+ attrs = [ '' ], n = 0, k, v;\r
if( !obj ) return ''; // Opera7\r
- for( p in obj ){\r
- v = obj[ p ];\r
- if( p === 'value' ){\r
+ for( k in obj ){\r
+ //if( X_EMPTY_OBJECT[ k ] ) continue;\r
+ v = obj[ k ];\r
+ if( k === 'value' ){\r
v = v.split( '"' ).join( '"' ).split( '>' ).join( '>' ).split( '<' ).join( '<' );\r
};\r
- attrs[ ++n ] = noValue[ p ] ? p : [ p, '="', v, '"' ].join( '' );\r
+ attrs[ ++n ] = noValue[ k ] ? k : [ k, '="', v, '"' ].join( '' );\r
};\r
return 0 < n ? attrs.join( ' ' ) : '';\r
};\r
\r
(function( renameForDOM, renameForTag ){\r
- var name, i;\r
- for( name in renameForDOM ){\r
- renameForTag[ renameForDOM[ name ] ] = name;\r
+ var k, i;\r
+ for( k in renameForDOM ){\r
+ //if( X_EMPTY_OBJECT[ k ] ) continue;\r
+ renameForTag[ renameForDOM[ k ] ] = k;\r
};\r
})( X_Node_Attr_renameForDOM, X_Node_Attr_renameForTag );\r
\r
\r
/* --------------------------------------\r
* attribute\r
- * X_Node_Attr_toIndex に定義されている 属性の場合\r
* \r
* http://nanto.asablo.jp/blog/2005/10/29/123294\r
* className, onclick等 はここで設定しない\r
* \r
*/\r
Node.prototype.attr = function( nameOrObj /* v */ ){\r
- var attrs = this._attrs, newAttrs, f, p, elm, v;\r
+ var attrs = this._attrs, newAttrs, f, k, elm, v;\r
\r
- if( this._xnodeType !== 1 ) return this;\r
+ if( !this._tag ) return this;\r
\r
if( nameOrObj && X.Type.isObject( nameOrObj ) ){\r
attrs || ( attrs = this._attrs = {} );\r
newAttrs = this._newAttrs || ( this._newAttrs = {} );\r
\r
- for( p in nameOrObj ){\r
- if( X_Node_Attr_setAttr( this, attrs, newAttrs, p, nameOrObj[ p ] ) === true ) f = true;\r
+ for( k in nameOrObj ){\r
+ //if( X_EMPTY_OBJECT[ k ] ) continue;\r
+ if( X_Node_Attr_setAttr( this, attrs, newAttrs, k, nameOrObj[ k ] ) === true ) f = true;\r
};\r
if( f ){\r
this._attrText = false;\r
- this._dirty |= X_Node_Dirty.ATTR;\r
- this._root && X_Node_reserveUpdate(); \r
+ this._flags |= X_Node_State.DIRTY_ATTR;\r
+ this._root && X_Node_reserveUpdate();\r
};\r
return this;\r
} else\r
// setter\r
if( X_Node_Attr_setAttr( this, attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
this._attrText = false;\r
- this._dirty |= X_Node_Dirty.ATTR;\r
+ this._flags |= X_Node_State.DIRTY_ATTR;\r
this._root && X_Node_reserveUpdate();\r
};\r
return this;\r
case 'style' :\r
case 'cssText' :\r
return this.cssText();\r
- case 'text' :\r
- return this.text();\r
- case 'html' :\r
- return this.html();\r
+\r
case 'selected' :\r
// kquery.js : safariのバグ対策\r
// if ($.browser.safari && key === "selected" && tmp) tmp.selectedIndex;\r
// 親ノードの selectedIndex の getter を呼んでおくと値が正しくなる、ということ?( by itozyun )\r
- if( X_UA.WebKit ) this._rawObject.parentNode.selectedIndex;\r
+ if( X_UA.WebKit ) this._rawObject.parentNode && this._rawObject.parentNode.selectedIndex;\r
case 'value' :\r
+ if( this._tag === 'INPUT' && X_Node_Attr_STATIC_VALUE_TYPES[ attrs[ 'type' ] ] ) break;\r
case 'checked' :\r
case 'disabled' : \r
case 'selectedIndex' :\r
return;\r
case 'id' :\r
v = ( v !== 'ie4uid' + that._uid ) ? v : undefined;\r
+ // TODO unique の check\r
if( v !== that._id ){\r
that._id = v;\r
- that._dirty |= X_Node_Dirty.ID;\r
+ that._flags |= X_Node_State.DIRTY_ID;\r
that._root && X_Node_reserveUpdate();\r
};\r
return; \r