OSDN Git Service

Version 0.6.41, fix for Opera8 & NN7.2+.
[pettanr/clientJs.git] / 0.6.x / js / dom / 14_XDomAttr.js
index 720155c..fe3d625 100644 (file)
@@ -171,16 +171,29 @@ X.Dom.Attr = {
                valuetype        : 'valueType',\r
                checked          : 'defaultChecked'\r
        },\r
+       \r
+       HAS_VALUE : {\r
+               INPUT    : true,\r
+               TEXTAREA : true,\r
+               SELECT   : true\r
+       },\r
+       \r
        renameForTag : {},\r
        // http://nanto.asablo.jp/blog/2005/10/29/123294\r
        // checked -> defaultChecked\r
        // 動的に生成した input 要素を文書ツリーに挿入する前に設定した checked 属性は反映されず、defaultChecked だと反映される\r
+       // 先頭にスペース\r
        objToAttrText : function( obj ){\r
-               var noValue = X.Dom.Attr.noValue, attrs = [], n = -1, p;\r
+               var noValue = X.Dom.Attr.noValue,\r
+                       attrs = [ '' ], n = 0, p, v;\r
                for( p in obj ){\r
-                       attrs[ ++n ] = noValue[ p ] ? p : [ p, '="', obj[ p ], '"' ].join( '' );\r
+                       v = obj[ p ];\r
+                       if( p === 'value' ){\r
+                               v = v.split( '"' ).join( '&quot;' ).split( '>' ).join( '&gt;' ).split( '<' ).join( '&lt;' );\r
+                       };\r
+                       attrs[ ++n ] = noValue[ p ] ? p : [ p, '="', v, '"' ].join( '' );\r
                };\r
-               return attrs.join( ' ' );\r
+               return 0 < n ? attrs.join( ' ' ) : '';\r
        }\r
 };\r
 \r
@@ -207,7 +220,7 @@ X.Dom.Attr = {
  * \r
  */\r
 X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){\r
-       var attrs = this._attrs, newAttrs, f;\r
+       var attrs = this._attrs, newAttrs, f, p, elm;\r
        \r
        if( this._xnodeType !== 1 ) return this;\r
        \r
@@ -234,6 +247,13 @@ X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){
                };\r
                return this;\r
        } else\r
+       if( nameOrObj === 'value' && X.Dom.Attr.HAS_VALUE[ this._tag.toUpperCase() ] ){\r
+               if( this._newAttrs && this._newAttrs.value ) return this._newAttrs.value;\r
+               if( elm = X.Dom.DOM_IE4 ? this._rawNode || this._ie4getRawNode() : this._rawNode ){\r
+                       attrs.value = elm.value;\r
+               };\r
+               return attrs.value;\r
+       } else\r
        if( typeof nameOrObj === 'string' && attrs ){\r
                // getter\r
                return attrs[ nameOrObj ];\r
@@ -242,7 +262,7 @@ X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){
 X.Dom.Node.prototype._setAttr = function( attrs, newAttrs, name, v ){\r
        if( name === 'UID' ) return;\r
        if( name === 'id' ){\r
-               v = 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