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
+ }; \r
\r
// 5. ie5 非表示fixフラグ\r
accumulatedFlags |= that._flags;\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
\r
// 6. 要素の生成\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
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
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
elm.removeAttribute( 'style' );\r
delete that._cssText;\r
};\r
- };\r
- \r
+ } else\r
if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
v = X_Node_CSS_objToIEFilterText( that );\r
if( v ){\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
-\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
};\r
\r
return html.join( '' );\r
- }) :\r
- (function(){});\r
+ });\r
\r
var X_Node__afterActualCreate =\r
- X_UA_DOM.W3C ? (function( that ){\r
-\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
that._flags & X_Node_State.DIRTY_IE_FILTER && X_Node__updateRawNode( that, that._rawObject || X_Node__ie4getRawNode( that ) );\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
// ちなみに 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
+ // 破棄前に value を控える TODO checked, selected も!\r
+ if( X_Node_Attr_HAS_VALUE[ that._tag ] && ( !that._newAttrs || !X_Object_inObject( 'value', that._newAttrs ) ) ){\r
+ that._attrs.value = elm.value;\r
+ };\r
+ elm.innerHTML = '';\r
};\r
};\r
\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'width' );\r
- return this._rawObject.offsetWidth;\r
+ // TODO width : length + overflow : hidden ならそれを返す? <- block or inline\r
+ return this._rawObject ? this._rawObject.offsetWidth : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).offsetWidth;\r
\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'height' );\r
- return this._rawObject.offsetHeight;\r
+ return this._rawObject ? this._rawObject.offsetHeight : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).offsetHeight;\r
\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'width' );\r
- return this._rawObject.clientWidth;\r
+ return this._rawObject ? this._rawObject.clientWidth : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).clientWidth;\r
\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'height' );\r
- return this._rawObject.clientHeight;\r
+ return this._rawObject ? this._rawObject.clientHeight : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).clientHeight;\r
\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'width' );\r
- return this._rawObject.scrollWidth;\r
+ return this._rawObject ? this._rawObject.scrollWidth : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).scrollWidth;\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- return this._rawObject.scrollHeight;\r
+ return this._rawObject ? this._rawObject.scrollHeight : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).scrollHeight;\r
\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'width' );\r
- return this._rawObject.scrollLeft;\r
+ return this._rawObject ? this._rawObject.scrollLeft : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).scrollLeft;\r
\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'width' );\r
- return this._rawObject.scrollTop;\r
+ return this._rawObject ? this._rawObject.scrollTop : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).scrollTop;\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'left' );\r
// this.css( X_Node_CSS_Unit.px, 'translateX' );\r
- return this._rawObject.offsetLeft;\r
+ return this._rawObject ? this._rawObject.offsetLeft : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
// pixelLeft http://www.din.or.jp/~hagi3/JavaScript/JSTips/DHTML/ProbIE5.htm\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'top' );\r
// this.css( X_Node_CSS_Unit.px, 'transisitonY' );\r
- return this._rawObject.offsetTop;\r
+ return this._rawObject ? this._rawObject.offsetTop : 0;\r
} else\r
if( X_UA_DOM.IE4 ){\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).offsetTop; \r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- return X_Node_getPosition( this._rawObject );\r
+ return this._rawObject ? X_Node_getPosition( this._rawObject ) : { x : 0, y : 0 };\r
} else\r
if( X_UA_DOM.IE4 ){\r
return X_Node_getPosition( this._rawObject || X_Node__ie4getRawNode( this ) );\r
X_ViewPort.unlisten( X.Event.AFTER_UPDATE, xnode, X_Node_Anime_gpuReleased );\r
\r
xnode.css({\r
- //willChange : X_Node_Anime_transitionProps + ',opacity,width,height',\r
+ willChange : X_Node_Anime_transitionProps + ',opacity,width,height',\r
backfaceVisibility : 'hidden',\r
transitionTimingFunction : obj.easing.style,\r
transitionDelay : '0s' // 0.001 にすると transitionend のタイミングが狂う、、、\r
xnode.listenOnce( 'transitionend', X_Node_Anime_onTransitionEnd );\r
\r
xnode.css({\r
- transitionProperty : X_Node_Anime_transitionProps + ',opacity,width,height', // X_Node_Anime_readyTransitionに移動??\r
+ transitionProperty : X_Node_Anime_transitionProps + ',opacity,width,height',\r
transitionDuration : obj.duration + 'ms'\r
});\r
\r
// 開始座標のセット(新規のみ)\r
// アニメーション指定のセット(または解除)(対象のみ)\r
// 目標座標のセット\r
- //xnode.unlisten( 'transitionend', X_Node_Anime_onTransitionEnd );\r
+ xnode.unlisten( 'transitionend', X_Node_Anime_onTransitionEnd );\r
\r
xnode.css({\r
- //willChange : '',\r
+ willChange : '',\r
backfaceVisibility : '',\r
transitionTimingFunction : '',\r
transitionDelay : '',\r