STYLE_IS_INVISIBLE : 2 << 2, // visibility : hidden or opacity : 0\r
STYLE_IS_POS_ABSOLUTE : 2 << 3, // position : absolute\r
STYLE_IS_NO_OVERFLOW : 2 << 4, // overflow : hidden\r
- STYLE_IS_WIDTH_LENGTH : 2 << 5, // width : width() のための commitUpdate が不要\r
+ STYLE_IS_WIDTH_LENGTH : 2 << 5, // width : overflow:hidden,要素無し、または要素が非表示なら、 width() のための commitUpdate が不要\r
STYLE_IS_WIDTH_PCT : 2 << 6, // width : width() のための commitUpdate が不要かもしれない。(親で LENGTH が指定されているなら)\r
STYLE_IS_HEIGHT_LENGTH : 2 << 7, // height :\r
STYLE_IS_HEIGHT_PCT : 2 << 8, // height :\r
\r
DIRTY_POSITION : 2 << 11, // 要素位置の変更が起こった。\r
DIRTY_CONTENT : 2 << 12, // width, height, x, y textNode の内容 TODO html と排他なので ID と共通でいい\r
- DIRTY_ID : 2 << 13, // width, height, x, y\r
- DIRTY_CLASSNAME : 2 << 14, // X_Node_CSS_getCharSize, width, height, x, y\r
- DIRTY_ATTR : 2 << 15, // X_Node_CSS_getCharSize, width, height, x, y\r
- DIRTY_CSS : 2 << 16, // X_Node_CSS_getCharSize, width, height, x, y\r
- DIRTY_IE_FILTER : X_UA.IE < 10 && X_UA.ActiveX ? 2 << 17 : 0, // \r
+ DIRTY_ID : 2 << 12, // width, height, x, y\r
+ DIRTY_CLASSNAME : 2 << 13, // X_Node_CSS_getCharSize, width, height, x, y\r
+ DIRTY_ATTR : 2 << 14, // X_Node_CSS_getCharSize, width, height, x, y\r
+ DIRTY_CSS : 2 << 15, // X_Node_CSS_getCharSize, width, height, x, y\r
+ DIRTY_IE_FILTER : X_UA[ 'IE' ] < 10 && X_UA[ 'ActiveX' ] ? 2 << 16 : 0, // \r
\r
- \r
- ELM_NEED_INIT : 2 << 18,\r
- OLD_ATTRTEXT : 2 << 19,\r
- OLD_CSSTEXT : 2 << 20,\r
+ ACTUAL_LISTENING : 2 << 17,\r
+ OLD_ATTRTEXT : 2 << 18,\r
+ OLD_CSSTEXT : 2 << 19,\r
\r
// filter 要素が親子になると不具合が出るのを検出\r
- IE_FILTER_NOW : 2 << 21,\r
+ IE_FILTER_NOW : 2 << 20,\r
\r
//GPU_WAITING : 2 << 20, // 1:子のGPU解除待\r
- GPU_RESERVED : 2 << 22, // 2:GPU予約\r
- GPU_NOW : 2 << 23, // 3:GPU now!\r
- GPU_RELEASE_RESERVED : 2 << 24, // 4:GPU解除予約\r
+ GPU_RESERVED : 2 << 21, // 2:GPU予約\r
+ GPU_NOW : 2 << 22, // 3:GPU now!\r
+ GPU_RELEASE_RESERVED : 2 << 23, // 4:GPU解除予約\r
+ GPU_CHILD : 2 << 24, \r
\r
- IE4_HAS_TEXTNODE : X_UA.IE4 ? 2 << 22 : 0,\r
- IE4_HAS_ELEMENT : X_UA.IE4 ? 2 << 23 : 0,\r
- IE4_DIRTY_CHILDREN : X_UA.IE4 ? 2 << 24 : 0,\r
- IE4_FIXED : X_UA.IE4 ? 2 << 25 : 0,\r
+ IE4_HAS_TEXTNODE : X_UA[ 'IE4' ] ? 2 << 21 : 0,\r
+ IE4_HAS_ELEMENT : X_UA[ 'IE4' ] ? 2 << 22 : 0,\r
+ IE4_DIRTY_CHILDREN : X_UA[ 'IE4' ] ? 2 << 23 : 0,\r
+ IE4_FIXED : X_UA[ 'IE4' ] ? 2 << 24 : 0,\r
\r
- IE5_DISPLAY_NONE_FIX : X_UA.IE5 && X_UA.ActiveX ? 2 << 25 : 0\r
+ IE5_DISPLAY_NONE_FIX : X_UA[ 'IE5' ] && X_UA[ 'ActiveX' ] ? 2 << 24 : 0\r
},\r
\r
- X_Node_BITMASK_RESET_STYLE = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ (\r
+ X_Node_BITMASK_RESET_STYLE = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ (\r
X_Node_State.STYLE_IS_DISPLAY_NONE |\r
X_Node_State.STYLE_IS_INVISIBLE |\r
X_Node_State.STYLE_IS_POS_ABSOLUTE |\r
X_Node_State.STYLE_IS_FONT_LENGTH |\r
X_Node_State.STYLE_IS_FONT_PCT ),\r
\r
- X_Node_BitMask_IS_DIRTY = X_Node_State.DIRTY_POSITION | \r
+ X_Node_BitMask_IS_DIRTY = X_Node_State.DIRTY_POSITION | \r
X_Node_State.DIRTY_CONTENT | X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME |\r
X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER,\r
\r
- X_Node_BitMask_RESET_DIRTY = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ X_Node_BitMask_IS_DIRTY,\r
+ X_Node_BitMask_RESET_DIRTY = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ X_Node_BitMask_IS_DIRTY,\r
\r
- X_Node_BitMask_RESET_GPU = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ ( X_Node_State.GPU_RESERVED | X_Node_State.GPU_NOW | X_Node_State.GPU_RELEASE_RESERVED ),\r
+ X_Node_BitMask_RESET_GPU = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ ( X_Node_State.GPU_RESERVED | X_Node_State.GPU_NOW | X_Node_State.GPU_RELEASE_RESERVED ),\r
\r
- X_Node_BitMask_IE4_IS_MIX = X_Node_State.IE4_HAS_TEXTNODE | X_Node_State.IE4_HAS_ELEMENT,\r
+ X_Node_BitMask_IE4_IS_MIX = X_Node_State.IE4_HAS_TEXTNODE | X_Node_State.IE4_HAS_ELEMENT,\r
\r
X_Node_TYPE = {\r
XNODE : 1,\r
IMAGE : 10\r
},\r
\r
- X_Node_strictElmCreation = !X_UA.MacIE && X_UA.IE5678,// && !X_UA.MacIE;\r
+ X_Node_strictElmCreation = !X_UA[ 'MacIE' ] && X_UA[ 'IE' ] <= 8,\r
\r
- X_Node_documentFragment = document.createDocumentFragment && ( !X_UA.IE || 5.5 <= X_UA.IE ) && document.createDocumentFragment(),\r
+ X_Node_documentFragment = document.createDocumentFragment && ( !X_UA[ 'IE' ] || 5.5 <= X_UA[ 'IE' ] ) && document.createDocumentFragment(),\r
\r
// 子の生成後に リアル文書 tree に追加する\r
- X_Node_addTreeAfterChildren = false,\r
+ X_Node_addTreeAfterChildren = !( X_UA[ 'IE' ] < 9 ),\r
\r
X_Node_displayNoneFixForIE5 = !!X_Node_State.IE5_DISPLAY_NONE_FIX,\r
\r
\r
X_Node_outerXNode = null,\r
\r
- X_Node_updateTimerID = 0,\r
-/*\r
+ X_Node_updateTimerID = 0;\r
+\r
+/**\r
* Node( rawElement | rawTextnode | htmlString | textString )\r
- */ \r
- Node = X.Node = X.EventDispatcher.inherits(\r
- 'XDomNode',\r
+ * \r
+ * @alias X.Node\r
+ * @class Node HTMLElement、TextNode をラップし jQuery 風な API で操作できます。\r
+ * @constructor \r
+ * @constructs Node\r
+ * @extends {EventDispatcher}\r
+ */\r
+var Node = X.Node = X.EventDispatcher.inherits(\r
+ 'X.Node',\r
X.Class.POOL_OBJECT, // X.Class.FINAL\r
{\r
_uid : 0,\r
_flags : X_Node_State.DESTROYED,\r
\r
- _rawObject : null,\r
+ // _rawObject : null,\r
_rect : null, // \r
_fontSize : 0,\r
\r
+ length : 1,\r
parent : null, // remove された枝も親子構造は維持している。\r
_xnodes : null, // Array.<Node>\r
+ _gpuParent : null, // TODO\r
\r
_tag : '',\r
_text : '',\r
- _id : '',\r
- _className : '',\r
+ _id : '', //\r
+ _className : '', //\r
\r
_attrs : null, // see X_Node_Attr\r
_newAttrs : null,\r
* TODO Node の継承ができない!\r
*/\r
Constructor : function( v ){\r
- var css, xnodes, xnode, parent, uid = X_Node_CHASHE.length;\r
+ var uid = X_Node_CHASHE.length,\r
+ css, xnodes, xnode, parent;\r
\r
if( X_Node_newByTag ){\r
X_Node_newByTag = false;\r
this._tag = v.toUpperCase();\r
- this._flags |= X_Node_State.EXIST;\r
arguments[ 1 ] && this.attr( arguments[ 1 ] );\r
css = arguments[ 2 ];\r
- css && this[ X.Type.isString( css ) ? 'cssText' : 'css' ]( css );\r
+ css && this[ X_Type_isString( css ) ? 'cssText' : 'css' ]( css );\r
} else\r
if( X_Node_newByText ){\r
X_Node_newByText = false;\r
this._text = v;\r
- this._flags |= X_Node_State.EXIST;\r
} else {\r
if( 1 < arguments.length ) return new X_NodeList( arguments );\r
- if( X.Type.isArray( v ) && v.length ) return new X_NodeList( v );\r
+ if( X_Type_isArray( v ) && v.length ) return new X_NodeList( v );\r
\r
switch( X_Node_getType( v ) ){\r
case X_Node_TYPE.XNODE :\r
if( xnode = X_Node_getXNode( v ) ) return xnode;\r
// v.parentNode || v.parentElement : dom1 || dom0\r
this.parent = ( parent = v.parentNode || v.parentElement ) && parent.tagName /* ie7- */ && X_Node_getXNode( parent );\r
- if( this.parent && ( this.parent._flags & X_Node_State.IN_TREE ) ){\r
- this._flags |= X_Node_State.IN_TREE;\r
- };\r
this._rawObject = v;\r
- this._flags |= X_Node_State.EXIST;\r
this._tag = v.tagName.toUpperCase();\r
this._id = v.id;\r
this._className = v.className;\r
this.cssText( v.style.cssText );\r
this._flags &= X_Node_BitMask_RESET_DIRTY; // X_Node_State.DIRTY_CSS を落とす\r
\r
- // TODO attr の回収は不可能、、、\r
+ // TODO attr の回収は不可能、、、?\r
if( X_UA_DOM.IE4 ){\r
v.setAttribute( 'UID', '' + uid );\r
} else {\r
case X_Node_TYPE.RAW_TEXT :\r
if( xnode = X_Node_getXNode( v ) ) return xnode;\r
this.parent = X_Node_getXNode( v.parentNode );\r
- if( this.parent && ( this.parent._flags & X_Node_State.IN_TREE ) ){\r
- this._flags |= X_Node_State.IN_TREE;\r
- };\r
this._rawObject = v;\r
- this._flags |= X_Node_State.EXIST;\r
this._text = v.data;\r
v.UID = uid;\r
break;\r
return X_Node_none;\r
\r
default :\r
+ this.length = 0;\r
if( X_Node_none ) return X_Node_none;\r
return;\r
};\r
};\r
\r
+ if( this.parent && ( this.parent._flags & X_Node_State.IN_TREE ) ){\r
+ this._flags |= X_Node_State.IN_TREE;\r
+ };\r
+ this._flags |= X_Node_State.EXIST;\r
X_Node_CHASHE[ this._uid = uid ] = this;\r
},\r
\r
\r
appendTo : X_Node_appendTo,\r
\r
- appendToRoot : X_Node_appendToRoot,\r
+ appendToRoot : X_Node_appendToRoot, // remove\r
\r
before : X_Node_before, // remove\r
\r
if( v === document ) return X_Node_TYPE.DOCUMENT;\r
if( v.constructor === Node ) return X_Node_TYPE.XNODE;\r
if( v.constructor === X_NodeList ) return X_Node_TYPE.XNODE_LIST;\r
- if( X.Type.isHTMLElement( v ) ) return X_Node_TYPE.RAW_HTML;\r
+ if( X_Type_isHTMLElement( v ) ) return X_Node_TYPE.RAW_HTML;\r
if( v.nodeType === 3 ) return X_Node_TYPE.RAW_TEXT;\r
- if( X.Type.isString( v ) ){\r
+ if( X_Type_isString( v ) ){\r
return '<' === v.charAt( 0 ) && v.charAt( v.length - 1 ) === '>' ? X_Node_TYPE.HTML_STRING : X_Node_TYPE.STRING;\r
};\r
return 0;\r
X_UA_DOM.IE4 ?\r
X.emptyFunction :\r
(function( root ){\r
- if( X.Type.isBoolean( root.isXML ) ) return root.isXML;\r
+ if( X_Type_isBoolean( root.isXML ) ) return root.isXML;\r
return root.isXML = root._rawObject.createElement( 'p' ).tagName !== root._rawObject.createElement( 'P' ).tagName;\r
}),\r
X_Node_CHASHE = [],\r
};\r
};\r
\r
+function X_Node_toggleInGPUFlag( gpuRoot, xnodes, flag ){\r
+ var i = xnodes.length, xnode;\r
+\r
+ if( flag ){\r
+ for( ; i; ){\r
+ xnode = xnodes[ --i ];\r
+ if( !xnode._gpuParent ){\r
+ xnode._flags |= X_Node_State.GPU_CHILD;\r
+ xnode._gpuParent = gpuRoot;\r
+ xnode._xnodes && X_Node_toggleInTreeFlag( gpuRoot, xnode._xnodes, flag ); \r
+ };\r
+ };\r
+ } else {\r
+ for( ; i; ){\r
+ xnode = xnodes[ --i ];\r
+ if( xnode._gpuParent === gpuRoot ){\r
+ xnode._flags &= ~X_Node_State.GPU_CHILD;\r
+ delete xnode._gpuParent;\r
+ xnode._xnodes && X_Node_toggleInTreeFlag( gpuRoot, xnode._xnodes, flag );\r
+ };\r
+ };\r
+ };\r
+};\r
+\r
/* --------------------------------------\r
* Create\r
*/\r
// 親の xnodes から v を消す\r
v.parent && v.remove();\r
// IE4 でテキストノードの追加、FIXED 済でない場合、親に要素の追加を通知\r
- if( X_UA.IE4 && !v._tag && ( this._flags & X_Node_State.IE4_FIXED ) === 0 ) this._flags |= X_Node_State.IE4_DIRTY_CHILDREN;\r
+ if( X_UA[ 'IE4' ] && !v._tag && ( this._flags & X_Node_State.IE4_FIXED ) === 0 ) this._flags |= X_Node_State.IE4_DIRTY_CHILDREN;\r
break;\r
default :\r
return this;\r
// 親の xnodes から v を消す\r
v.parent && v.remove();\r
// IE4 でテキストノードの追加、FIXED 済でない場合、親に要素の追加を通知\r
- if( X_UA.IE4 && !v._tag && ( this._flags & X_Node_State.IE4_FIXED ) === 0 ) this._flags |= X_Node_State.IE4_DIRTY_CHILDREN;\r
+ if( X_UA[ 'IE4' ] && !v._tag && ( this._flags & X_Node_State.IE4_FIXED ) === 0 ) this._flags |= X_Node_State.IE4_DIRTY_CHILDREN;\r
break;\r
default :\r
return this;\r
function X_Node_destroy( isChild ){\r
var xnodes = this._xnodes, i, elm;\r
\r
- if( !this._flags ) return;\r
+ if( ( this._flags & X_Node_State.EXIST ) === 0 ) return;\r
\r
elm = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
\r
\r
if( this._flags & X_Node_State.IN_TREE ){\r
!isChild && this.remove();\r
- delete this._flags;\r
+ this._flags &= ~X_Node_State.EXIST;\r
} else {\r
this.parent && this.parent._xnodes.splice( this.parent._xnodes.indexOf( this ), 1 );\r
elm && !isChild && X_Node__actualRemove( this );\r
};\r
\r
function X_Node_onBeforeKill( e ){\r
- var xnodes = this._xnodes,\r
- elm = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this ),\r
- i;\r
- \r
- if( !this._flags ) return;\r
+ var xnodes = this._xnodes, i, elm;\r
\r
- delete X_Node_CHASHE[ this._uid ];\r
+ if( ( this._flags & X_Node_State.EXIST ) === 0 ) return X.Callback.NONE;\r
\r
+ elm = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
+ elm && this._listeners && this.unlisten(); // イベントの退避\r
+\r
if( xnodes && ( i = xnodes.length ) ){\r
for( ; i; ){\r
X_Node_onBeforeKill.call( xnodes[ --i ] );\r
};\r
};\r
\r
- e && this.remove();\r
- elm && this._listeners && this.unlisten(); // イベントの退避\r
- \r
- if( e && elm && elm.parentNode && elm.parentNode.tagName ){\r
- delete this._flags;\r
- return X.Callback.PREVENT_DEFAULT;\r
+ delete X_Node_CHASHE[ this._uid ];\r
+\r
+ if( e ){\r
+ this.remove();\r
+ if( X_Node_reserveRemoval[ X_Node_reserveRemoval.length - 1 ] === this ){\r
+ this._flags &= ~X_Node_State.EXIST;\r
+ return X.Callback.PREVENT_DEFAULT; \r
+ }; \r
};\r
+ return X.Callback.NONE;\r
};\r
\r
\r
\r
// setter\r
if( this._className === v ) return this;\r
- if( !v || typeof v !== 'string' ){\r
+ if( !v || !X_Type_isString( v ) ){\r
delete this._className;\r
} else {\r
// cleanup\r
};\r
return this;\r
};\r
- if( !text ) return this.empty();\r
if( ( xnodes = this._xnodes ) && xnodes.length === 1 && !xnodes[ 0 ]._tag ){\r
xnodes[ 0 ].text( text );\r
return this;\r
};\r
+ // TODO 一つのtextnode を残すケース 完全に削除したい場合は empty()を使う\r
+ if( !text ) return this.empty(); \r
this.empty().createText( text );\r
return this;\r
};\r
raw = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
if( !raw ) return;\r
\r
+ if( name === 'scrollTo' ){\r
+ raw.scrollLeft = arguments[ 1 ] || 0;\r
+ raw.scrollTop = arguments[ 2 ] || 0;\r
+ return;\r
+ };\r
+ \r
func = raw[ name ];\r
- if( X.Type.isFunction( func ) ){\r
+ if( X_Type_isFunction( func ) ){\r
if( l ){\r
args = X_Object_cloneArray( arguments );\r
args.shift();\r
};\r
return raw[ name ](); \r
} else\r
- if( X.Type.isUnknown( func ) ){\r
+ if( X_Type_isUnknown( func ) ){\r
// typeof func === unknown に対策\r
// http://la.ma.la/blog/diary_200509031529.htm \r
if( l ){\r
\r
if( time ){\r
// X.Timer 経由でないと発火しない このイベントでサイズを取ると無限ループに\r
- X_System._listeners && X_System._listeners[ X.Event.BEFORE_UPDATE ] && X_System.dispatch( X.Event.BEFORE_UPDATE );\r
+ X_System._listeners && X_System._listeners[ X_Event.BEFORE_UPDATE ] && X_System.dispatch( X_Event.BEFORE_UPDATE );\r
};\r
\r
removal = X_Node_reserveRemoval;\r
if( i = removal.length ){\r
for( ; i; ){\r
xnode = removal[ --i ];\r
+ // TODO GPU レイヤーの子の場合、remove をスキップする。 非GPU レイヤーへ apppend される場合、clone する?\r
X_Node__actualRemove( xnode );\r
- !xnode._flags && xnode.kill();\r
+ ( xnode._flags & X_Node_State.EXIST ) === 0 && xnode.kill();\r
};\r
removal.length = 0;\r
};\r
\r
if( time ){\r
// X.Timer 経由でないと発火しない このイベントでサイズを取ると無限ループに\r
- X_System._listeners && X_System._listeners[ X.Event.UPDATED ] && X_System.dispatch( X.Event.UPDATED ); \r
+ X_System._listeners && X_System._listeners[ X_Event.UPDATED ] && X_System.dispatch( X_Event.UPDATED ); \r
};\r
\r
- X_ViewPort._listeners && X_ViewPort._listeners[ X.Event.AFTER_UPDATE ] && X_ViewPort.asyncDispatch( X.Event.AFTER_UPDATE );\r
+ X_ViewPort._listeners && X_ViewPort._listeners[ X_Event.AFTER_UPDATE ] && X_ViewPort.asyncDispatch( X_Event.AFTER_UPDATE );\r
};\r
\r
/*\r
- * 1. GPU_NOW の場合、これ以下の一切の更新を行わない\r
- * 2. GPU解放予約 の場合、この要素のみ変更を行う。rAF 後にさらに更新するためフラグを立てる。\r
+ * 1. GPU_NOW の場合、子の変更は行わない\r
+ * 2. GPU解放予約 の場合//、この要素のみ変更を行う。rAF 後にさらに更新するためフラグを立てる。\r
* 3. GPU予約 -> GPU\r
* 4. style="display:none" の場合、これ以下の変更を行わない。\r
* 5. ie5 非表示フラグが立っていて、親と自身の class・id によって非表示になっていて、親と自身に変更がない。accumulatedFlags を使用。\r
X_UA_DOM.W3C ?\r
( function( that, parentElement, nextElement, accumulatedFlags ){\r
var elm = that._rawObject,\r
- xnodes, l, next;\r
+ created, xnodes, l, next;\r
\r
// 1. GPU 一切の更新をスキップ\r
if( that._flags & X_Node_State.GPU_NOW ){\r
if( X_Node_displayNoneFixForIE5 ){\r
// filter の効いている要素を含む要素は display:none が無視される。\r
// filter = '' で削除はできるが、再表示時に filter が消える。 -> filter な要素を削除してしまう。 \r
- elm && elm.parentNode && X_Node__actualRemove( that );\r
+ if( elm && elm.parentNode ){\r
+ X_Node__actualRemove( that );\r
+ };\r
return nextElement;\r
};\r
elm && ( elm.style.display = 'none' );\r
- return elm || nextElement;\r
- }; \r
+ return ( elm && elm.nextSibling === nextElement ) ? elm : nextElement;\r
+ };\r
\r
// 5. ie5 非表示fixフラグ\r
accumulatedFlags |= that._flags;\r
\r
- if( that._flags & X_Node_State.IE5_DISPLAY_NONE_FIX && ( accumulatedFlags & ( X_Node_State.DIRTY_POSITION | X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME ) === 0 ) ) return nextElement;\r
- \r
+ if( that._flags & X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
+ if( accumulatedFlags & ( X_Node_State.DIRTY_POSITION | X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME ) === 0 ){\r
+ return nextElement;\r
+ };\r
+ };\r
\r
// 6. 要素の生成\r
if( !elm ){\r
- nextElement ?\r
- parentElement.insertBefore( X_Node__actualCreate( that, false ), nextElement ) :\r
- parentElement.appendChild( X_Node__actualCreate( that, false ) );\r
- return X_Node__afterActualCreate( that ) || X_Node_displayNoneFixForIE5 && nextElement; // ie5 だけこの位置で _rawObject が空の場合がある\r
- // X_Node__actualCreate, X_Node__afterActualCreate の処理をこちら側に。\r
- };\r
- \r
+ if( !that._tag ){\r
+ that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ that._rawObject = elm = document.createTextNode( X_String_chrReferanceTo( that._text ) );\r
+ if( !X_UA[ 'IE' ] ){\r
+ elm.UID = that._uid;\r
+ };\r
+ } else\r
+ if( X_Node_strictElmCreation ){\r
+ that._flags & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( that, true ); // OLD_CSSTEXT ??\r
+ \r
+ that._rawObject = elm =\r
+ document.createElement( [\r
+ '<', that._tag,\r
+ ' UID="', that._uid, '"',\r
+ that._id ? ' id="' + that._id + '"' : '',\r
+ that._className ? ' class="' + that._className + '"' : '',\r
+ X_Node_Attr_objToAttrText( that, true ),\r
+ that._cssText ? ' style="' + that._cssText + '"' : '',\r
+ '>' ].join( '' ) );\r
+ } else {\r
+ that._rawObject = elm = document.createElement( that._tag );\r
+ };\r
+ \r
+ // IE には要素追加のタイミングで起こるメモリリークがありここで追加\r
+ if( !X_Node_addTreeAfterChildren ){\r
+ nextElement ?\r
+ parentElement.insertBefore( elm, nextElement ) :\r
+ parentElement.appendChild( elm );\r
+ };\r
+\r
+ if( that._tag ){\r
+ X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰 \r
+ that._flags |= X_Node_State.ACTUAL_LISTENING;\r
+ \r
+ if( X_Node_documentFragment ){\r
+ //( frg = X_Node_documentFragment ).appendChild( elm );\r
+ // 連続する要素の差し替えの場合に有効\r
+ };\r
+\r
+ if( X_Node_strictElmCreation ){\r
+ that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ // ie の string から要素を作る場合、ネットワーク系属性は onload イベントなどを拾うために、要素生成->イベント復帰後に適用する\r
+ that._newAttrs && ( that._flags |= X_Node_State.DIRTY_ATTR ); // _newAttrs には ネットワーク系属性が入っている。Network 系の属性は遅らせて設定\r
+ that._flags |= X_Node_State.DIRTY_IE_FILTER;// doc 追加後に filter を指定しないと有効にならない。\r
+ } else {\r
+ elm.UID = that._uid;\r
+ that._newAttrs = that._attrs;\r
+ that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ that._flags |= X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME | X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER;\r
+ \r
+ // http://outcloud.blogspot.jp/2010/09/iframe.html\r
+ // この問題は firefox3.6 で確認\r
+ if( X_UA[ 'Gecko' ] ){\r
+ if( that._tag === 'IFRAME' && ( !that._attrs || !that._attrs[ 'src' ] ) ){\r
+ //elm.contentWindow.location.replace = elm.src = 'about:blank';\r
+ that.attr( 'src', 'about:blank' );\r
+ };\r
+ };\r
+ };\r
+ };\r
+ \r
+ created = true;\r
+ } else\r
// 7. 要素の位置のズレを補正\r
if( elm.parentNode !== parentElement || ( nextElement && elm.nextSibling !== nextElement ) ){\r
nextElement ?\r
parentElement.insertBefore( elm, nextElement ) :\r
parentElement.appendChild( elm );\r
};\r
- that._flags &= ~X_Node_State.DIRTY_POSITION;\r
- \r
- // 8. 更新の適用\r
- if( accumulatedFlags & X_Node_BitMask_IS_DIRTY ) delete that._fontSize;\r
\r
- that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
- \r
+ if( that._listeners && ( that._flags & X_Node_State.ACTUAL_LISTENING ) === 0 ){\r
+ X_EventDispatcher_toggleAllEvents( that, true );// イベントの退避\r
+ that._flags |= X_Node_State.ACTUAL_LISTENING;\r
+ };\r
\r
+ // 8. 更新の適用\r
+ if( accumulatedFlags & X_Node_BitMask_IS_DIRTY ){\r
+ delete that._fontSize;\r
+ X_Node__updateRawNode( that, elm );\r
+ };\r
+\r
// 9. ie5 only\r
// 親及び自身へのクラス・id指定で display : none になるケースがありそれを検出\r
// 生成と破棄が繰り返されてしまう、親と自身の id, class が変わった場合だけ再生成。 accumulatedFlags & ( ID | CLASSNAME )\r
+ // currentStyle を観ていたときはエラーで停止する、alert と挟むと正常に動いて支離滅裂\r
if( X_Node_displayNoneFixForIE5 && that._tag ){\r
- if( elm.currentStyle.display === 'none' ){\r
+ if( elm.runtimeStyle.display === 'none' ){\r
X_Node__actualRemove( that );\r
that._flags |= X_Node_State.IE5_DISPLAY_NONE_FIX;\r
return nextElement; \r
};\r
};\r
\r
+ if( created && X_Node_addTreeAfterChildren ){\r
+ nextElement ?\r
+ parentElement.insertBefore( elm, nextElement ) :\r
+ parentElement.appendChild( elm );\r
+ \r
+ if( X_UA[ 'Gecko' ] && that._tag === 'IFRAME' && elm.contentWindow ){\r
+ // tree に追加されるまで contentWindow は存在しない。\r
+ elm.contentWindow.location.replace = elm.src;\r
+ };\r
+ };\r
+\r
return elm;\r
}) :\r
X_UA_DOM.IE4 ? \r
return elm;\r
};\r
\r
+ // 4. style="display:none" の場合\r
+ if( that._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
+ if( elm ){\r
+ elm.style.display = 'none';\r
+ if( elm.style.display !== 'none' ){ // ie4 の style は currentStyle 相当らしい、、、? div 以外への display:none が効かないので remove する。\r
+ X_Node__actualRemove( that );\r
+ return prevElement;\r
+ };\r
+ };\r
+ return elm || prevElement;\r
+ };\r
+ \r
if( !elm ){\r
prevElement ?\r
prevElement.insertAdjacentHTML( 'AfterEnd', X_Node__actualCreate( that, false ) ) :\r
(function(){});\r
\r
/*\r
- * TODO IE5 は filter-fix があるため、親から変更を適用し、自信の display:none を調べる\r
* GPU レイヤーするブラウザは、子要素から変更を当てていく? <- とりあえず、親要素から。\r
*/\r
var X_Node__updateRawNode =\r
};\r
// className\r
if( that._flags & X_Node_State.DIRTY_CLASSNAME ){\r
- that._className ? ( elm.className = that._className ) : ( elm.className && elm.removeAttribute( X_UA.IE5678 ? 'className' : 'class' ) ); // className は ie7-? \r
+ that._className ? ( elm.className = that._className ) : ( elm.className && elm.removeAttribute( X_UA[ 'IE' ] < 8 ? 'className' : 'class' ) ); // className は ie7- \r
};\r
\r
- that._tag === 'TEXTAREA' && console.log( that.call('outerHTML') );\r
- \r
// attr\r
if( that._flags & X_Node_State.DIRTY_ATTR && ( attrs = that._newAttrs || that._attrs ) ){\r
rename = X_Node_Attr_renameForDOM;\r
- \r
- // IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
- if( !X_UA.MacIE && X_UA.IE5x && that._tag === 'TEXTAREA' && ( ( v = attrs[ 'value' ] ) || X_Object_inObject( 'value', attrs ) ) ){\r
- delete attrs[ 'value' ];\r
- elm.firstChild ?\r
- ( elm.firstChild.data = v || '' ) :\r
- elm.appendChild( document.createTextNode( v || '' ) );\r
- };\r
- // http://outcloud.blogspot.jp/2010/09/iframe.html\r
- // この問題は firefox3.6 で確認\r
- if( X_UA.Gecko && that._tag === 'IFRAME' && ( ( v = attrs[ 'src' ] ) || X_Object_inObject( 'src', attrs ) ) ){\r
- elm.contentWindow.location.replace = elm.src = v || '';\r
- delete attrs[ 'src' ];\r
- };\r
\r
for( k in attrs ){\r
+ v = attrs[ k ];\r
+ \r
+ switch( that._tag + k ){\r
+ case 'TEXTAREAvalue' :\r
+ // IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
+ if( !X_UA[ 'MacIE' ] && X_UA[ 'IE5x' ] ){\r
+ elm.firstChild ?\r
+ ( elm.firstChild.data = v || '' ) :\r
+ elm.appendChild( document.createTextNode( v || '' ) );\r
+ continue;\r
+ };\r
+ break;\r
+ \r
+ case 'IFRAMEsrc' :\r
+ // http://outcloud.blogspot.jp/2010/09/iframe.html\r
+ // この問題は firefox3.6 で確認\r
+ if( X_UA[ 'Gecko' ] && elm.contentWindow ){\r
+ elm.contentWindow.location.replace = elm.src = v || '';\r
+ continue;\r
+ };\r
+ break;\r
+ \r
+ case 'IFRAMEname' :\r
+ // http://d.hatena.ne.jp/NeoCat/20080921/1221940658\r
+ // こちらに名前をsetしないとtargetが動作しない\r
+ // これってあとから name を変更できないバグでは? itozyun\r
+ // if( X_UA[ 'IE' ] ) elm.name = elm.contentWindow.name = v || '';\r
+ };\r
+ \r
//if( X_EMPTY_OBJECT[ k ] ) continue;\r
// TODO IE では input, なぜか button, object も type, name の変更が出来ない、同値で置き換えようとしても不可\r
- ( v = attrs[ k ] ) === undefined ?\r
+ v === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
( elm[ rename[ k ] || k ] = X_Node_Attr_noValue[ k ] ? k : v );\r
};\r
// style\r
if( that._flags & X_Node_State.DIRTY_CSS ){\r
if( that._flags & X_Node_State.OLD_CSSTEXT ? X_Node_CSS_objToCssText( that ) : that._cssText ){\r
- X_UA.Opera78 || X_UA.NN6 ?\r
+ X_UA[ 'Opera78' ] || X_UA[ 'NN6' ] ?\r
elm.setAttribute( 'style', that._cssText ) : // opera8用\r
( elm.style.cssText = that._cssText );\r
} else {\r
elm.style.cssText = ''; // IE5.5以下 Safari3.2 で必要\r
elm.removeAttribute( 'style' );\r
- delete that._cssText;\r
};\r
} else\r
if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
- elm.style.filter = v = X_Node_CSS_objToIEFilterText( that );\r
+ v = X_Node_CSS_objToIEFilterText( that );\r
if( v ){\r
+ elm.style.filter = v;\r
that._flags |= X_Node_State.IE_FILTER_NOW;\r
} else {\r
+ elm.style.removeAttribute( 'filter' );\r
that._flags &= ~X_Node_State.IE_FILTER_NOW;\r
};\r
};\r
} else {\r
elm.style.cssText = '';\r
elm.removeAttribute( 'style' );\r
- delete that._cssText;\r
};\r
- };\r
- \r
+ } else\r
if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
- that._rawObject.style.filter = v = X_Node_CSS_objToIEFilterText( that );\r
+ v = X_Node_CSS_objToIEFilterText( that );\r
if( v ){\r
+ elm.style.filter = v;\r
that._flags |= X_Node_State.IE_FILTER_NOW;\r
} else {\r
+ elm.style.removeAttribute( 'filter' );\r
that._flags &= ~X_Node_State.IE_FILTER_NOW;\r
};\r
};\r
* document.createElement of ie4 is only for OPTION & IMAGE.\r
*/\r
var X_Node__actualCreate =\r
- X_UA_DOM.W3C ? (function( that, isChild ){\r
- var elm = that._rawObject, xnodes, frg, i, l;\r
- \r
- if( !that._tag ){\r
- if( elm ){\r
- that._flags & X_Node_BitMask_IS_DIRTY && ( elm.data = X_String_chrReferanceTo( that._text ) );\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
- return elm;\r
- };\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
- return that._rawObject = document.createTextNode( X_String_chrReferanceTo( that._text ) );\r
- };\r
- \r
- if( !elm ){\r
- that._flags & X_Node_State.DIRTY_CSS && X_Node_CSS_objToCssText( that, true );\r
-\r
- that._rawObject = elm =\r
- X_Node_strictElmCreation ?\r
- document.createElement( [\r
- '<', that._tag,\r
- ' UID="', that._uid, '"',\r
- that._id ? ' id="' + that._id + '"' : '',\r
- that._className ? ' class="' + that._className + '"' : '',\r
- that._flags & X_Node_State.OLD_ATTRTEXT ? X_Node_Attr_objToAttrText( that ) : that._attrText,\r
- that._cssText ? ' style="' + that._cssText + '"' : '',\r
- '>' ].join( '' ) ) :\r
- document.createElement( that._tag );\r
- \r
- that._flags |= X_Node_State.ELM_NEED_INIT; \r
- };\r
- \r
- if( X_Node_documentFragment ){\r
- if( ( xnodes = that._xnodes ) && ( l = xnodes.length ) ){\r
- !isChild && ( frg = X_Node_documentFragment ).appendChild( elm );\r
- for( i = 0; i < l; ++i ){\r
- elm.appendChild( X_Node__actualCreate( xnodes[ i ], true ) );\r
- };\r
- return frg || elm;\r
- };\r
- };\r
- \r
- return elm;\r
- }) :\r
- X_UA_DOM.IE4 ? (function( that, isChild ){\r
+ X_UA_DOM.IE4 && (function( that, isChild ){\r
var uid = that._uid,\r
html, xnodes, n, i, l;\r
\r
html = [ '<FONT id=ie4uid', uid, ' UID="', uid, '">', that._text, '</FONT>' ];// fake textNode\r
delete that._rawObject;\r
} else {\r
- if( /* that._rawObject && */ !isChild ) X_Node__actualRemove( that, /* true */ false );\r
+ if( !isChild ) X_Node__actualRemove( that, /* true */ false );\r
\r
- that._flags & X_Node_State.DIRTY_CSS && X_Node_CSS_objToCssText( that, true );\r
+ that._flags & X_Node_State.OLD_CSSTEXT && X_Node_CSS_objToCssText( that, true );\r
\r
html = [\r
'<', that._tag, ' id=', ( that._id || ( 'ie4uid' + uid ) ), ' UID="', uid, '"',\r
that._className ? ' class="' + that._className + '"' : '',\r
- that._flags & X_Node_State.OLD_ATTRTEXT ? X_Node_Attr_objToAttrText( that ) : that._attrText,\r
+ X_Node_Attr_objToAttrText( that, true ),\r
that._cssText ? ' style="' + that._cssText + '"' : '',\r
'>' ];\r
\r
};\r
X_Dom_DTD_EMPTY[ that._tag ] || ( html[ n ] = '<\/' + that._tag + '>' );\r
\r
- delete that._newAttrs;\r
+ that._newAttrs && ( that._flags |= X_Node_State.DIRTY_ATTR );\r
};\r
\r
return html.join( '' );\r
- }) :\r
- (function(){});\r
+ });\r
\r
var X_Node__afterActualCreate =\r
- X_UA_DOM.W3C ? (function( that ){\r
- var elm = that._rawObject, xnodes, l, i, v;\r
- \r
- if( !that._tag ){\r
- elm.UID = that._uid;\r
- return elm;\r
- };\r
- \r
- xnodes = that._xnodes;\r
- l = xnodes && xnodes.length;\r
-\r
- that._flags &= ~X_Node_State.DIRTY_POSITION;\r
-\r
- // ie5 では、documentFragment が無いため、この位置で要素はこれのみ。\r
- if( X_Node_displayNoneFixForIE5 ){\r
- that._flags & X_Node_State.ELM_NEED_INIT || ( that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm ) );\r
- \r
- if( elm.currentStyle.display === 'none' ){\r
- X_Node__actualRemove( that );\r
- that._flags |= X_Node_State.IE5_DISPLAY_NONE_FIX;\r
- return;\r
- } else {\r
- that._flags &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;\r
- };\r
- };\r
-\r
- // src の onload があるので先ではないか?\r
- // TODO ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
- X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
-\r
- if( that._flags & X_Node_State.ELM_NEED_INIT ){\r
- that._flags ^= X_Node_State.ELM_NEED_INIT;\r
- \r
- if( !X_Node_documentFragment ){// docFrg が使えない場合、doc 追加後に子を追加 TODO ie の場合この順序(メモリリーク対策)、他のブラウザは 子が先が有利では?\r
- for( i = 0; i < l; ++i ){\r
- elm.appendChild( X_Node__actualCreate( xnodes[ i ], true ) );\r
- };\r
- }; \r
- \r
- if( X_Node_strictElmCreation ){\r
- // TODO src 等の設定\r
- if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
- // doc 追加後に filter を指定しないと有効にならない。\r
- elm.style.filter = v = X_Node_CSS_objToIEFilterText( that );\r
- if( v ){\r
- that._flags |= X_Node_State.IE_FILTER_NOW;\r
- } else {\r
- that._flags &= ~X_Node_State.IE_FILTER_NOW;\r
- };\r
- };\r
- delete that._newAttrs;\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
- } else {\r
- console.log();\r
- elm.UID = that._uid;\r
- that._newAttrs = that._attrs;\r
- that._flags |= X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME | X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER;\r
- X_Node__updateRawNode( that, elm );\r
- \r
- // http://outcloud.blogspot.jp/2010/09/iframe.html\r
- // この問題は firefox3.6 で確認\r
- if( X_UA.Gecko && that._tag === 'IFRAME' ){\r
- if( !that._attrs[ 'src' ] ){\r
- elm.contentWindow.location.replace = elm.src = 'about:blank'; \r
- };\r
- };\r
- };\r
- } else {\r
- that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
- };\r
-\r
- for( i = 0; i < l; ++i ){\r
- X_Node__afterActualCreate( xnodes[ i ] );\r
- };\r
-\r
- return elm;\r
- }) :\r
- X_UA_DOM.IE4 ? (function( that ){\r
+ X_UA_DOM.IE4 && (function( that ){\r
var xnodes, i, v;\r
\r
if( !that._tag ) return that;\r
X_Node__afterActualCreate( xnodes[ --i ] );\r
};\r
};\r
- if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
- X_Node__ie4getRawNode( that ).style.filter = v = X_Node_CSS_objToIEFilterText( that );\r
- if( v ){\r
- that._flags |= X_Node_State.IE_FILTER_NOW;\r
- } else {\r
- that._flags &= ~X_Node_State.IE_FILTER_NOW;\r
- };\r
+ // ネットワーク系属性と filter は要素生成後に適用\r
+ if( that._flags & ( X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_IE_FILTER ) ){\r
+ X_Node__updateRawNode( that, that._rawObject || X_Node__ie4getRawNode( that ) );\r
+ } else {\r
+ that._flags &= X_Node_BitMask_RESET_DIRTY;\r
};\r
- that._flags &= X_Node_BitMask_RESET_DIRTY;\r
X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
- }) :\r
- (function(){});\r
+ });\r
\r
var X_Node__actualRemove =\r
X_UA_DOM.W3C ?\r
var xnodes = that._xnodes,\r
elm = that._rawObject,\r
child, i, l;\r
+\r
if( xnodes && ( l = xnodes.length ) ){\r
for( i = 0; i < l; ++i ){\r
child = xnodes[ i ];\r
\r
if( !elm ) return;\r
\r
- that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
+ if( that._flags & X_Node_State.ACTUAL_LISTENING ){\r
+ that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
+ that._flags &= ~X_Node_State.ACTUAL_LISTENING;\r
+ };\r
\r
// ie5では filter の効いている要素をremove時に破棄して、再度append 時に新規生成する\r
// ちなみに elm.filters に触ると ie8 でなぜかカラム落ちが発生、、、\r
if( X_Node_displayNoneFixForIE5 ){\r
if( elm.filters && elm.filters.length ){\r
+ //elm.style.removeAttribute( 'filter' );\r
isChild = false;\r
delete that._rawObject;\r
+ // 破棄前にインタラクティブな属性値を控える\r
+ if( X_Node_Attr_HAS_VALUE[ that._tag ] && ( !that._newAttrs || !X_Object_inObject( 'value', that._newAttrs ) ) ){\r
+ if( !that._attrs ) that._attrs = {};\r
+ that._attrs.value = elm.value;\r
+ };\r
+ if( that._tag === 'OPTION' && ( !that._newAttrs || !X_Object_inObject( 'selected', that._newAttrs ) ) ){\r
+ if( !that._attrs ) that._attrs = {};\r
+ that._attrs.selected = elm.selected;\r
+ };\r
+ if( that._tag === 'SELECT' && ( !that._newAttrs || !X_Object_inObject( 'selectedIndex', that._newAttrs ) ) ){\r
+ if( !that._attrs ) that._attrs = {};\r
+ that._attrs.selectedIndex = elm.selectedIndex;\r
+ };\r
+ if( that._tag === 'INPUT' && that._attr && ( that._attr.type === 'checkbox' || that._attr.type === 'radio' ) && ( !that._newAttrs || !X_Object_inObject( 'checked', that._newAttrs ) ) ){\r
+ that._attrs.checked = elm.checked;\r
+ };\r
+ // 子要素への参照を外す\r
+ elm.innerHTML = '';\r
};\r
};\r
\r
- if( !X_UA.MacIE ){\r
+ if( !X_UA[ 'MacIE' ] ){\r
// elm.parentNode.tagName for ie7\r
!isChild && elm.parentNode && elm.parentNode.tagName && elm.parentNode.removeChild( elm );\r
} else {\r
if( !elm ) return;\r
that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
\r
- // 破棄前に value を控える TODO checked, selected も!\r
+ // 破棄前にインタラクティブな属性値を控える\r
if( X_Node_Attr_HAS_VALUE[ that._tag ] && ( !that._newAttrs || !X_Object_inObject( 'value', that._newAttrs ) ) ){\r
+ if( !that._attrs ) that._attrs = {};\r
that._attrs.value = elm.value;\r
};\r
+ if( that._tag === 'OPTION' && ( !that._newAttrs || !X_Object_inObject( 'selected', that._newAttrs ) ) ){\r
+ if( !that._attrs ) that._attrs = {};\r
+ that._attrs.selected = elm.selected;\r
+ };\r
+ if( that._tag === 'SELECT' && ( !that._newAttrs || !X_Object_inObject( 'selectedIndex', that._newAttrs ) ) ){\r
+ if( !that._attrs ) that._attrs = {};\r
+ that._attrs.selectedIndex = elm.selectedIndex;\r
+ };\r
+ if( that._tag === 'INPUT' && that._attr && ( that._attr.type === 'checkbox' || that._attr.type === 'radio' ) && ( !that._newAttrs || !X_Object_inObject( 'checked', that._newAttrs ) ) ){\r
+ if( !that._attrs ) that._attrs = {};\r
+ that._attrs.checked = elm.checked;\r
+ };\r
+\r
elm.removeAttribute( 'id' ); // ?\r
//document.all[ that._id || ( 'ie4uid' + that._uid ) ] = null; // MacIE5 でエラー\r
if( !isChild ) elm.outerHTML = '';\r
}) :\r
(function(){});\r
\r
-X_ViewPort.listenOnce( X.Event.UNLOAD, X_Node__actualRemove, [ X_Node_html, true ] );\r
+X_ViewPort.listenOnce( X_Event.UNLOAD, X_Node__actualRemove, [ X_Node_html, true ] );\r
\r