IN_TREE : 0x2, // xnode が(仮想)ツリーに追加されている -> 描画の対象\r
\r
ELM_NEED_INIT : 2 << 1,\r
+ ELM_HAS_PARENT : 2 << 1,\r
\r
STYLE_IS_DISPLAY_NONE : 2 << 2, // display : none \r
STYLE_IS_INVISIBLE : 2 << 3, // visibility : hidden or opacity : 0\r
OLD_ATTRTEXT : 2 << 18,\r
OLD_CSSTEXT : 2 << 19,\r
\r
+ IE_FILTER_NOW : 2 << 20,\r
+\r
GPU_WAITING : 2 << 20, // 1:子のGPU解除待\r
GPU_RESERVED : 2 << 21, // 2:GPU予約\r
GPU_NOW : 2 << 20 | 2 << 21, // 3:GPU now!()\r
X_Node_State.STYLE_IS_FONT_PCT ),\r
\r
X_Node_BitMask_IS_DIRTY = \r
- X_Node_State.DIRTY_CHILD | X_Node_State.DIRTY_CONTENT | X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME |\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
\r
delete this.parent;\r
parent._xnodes.splice( parent._xnodes.indexOf( this ), 1 );\r
+ \r
if( this._flags & X_Node_State.IN_TREE ){\r
- this._flags ^= X_Node_State.IN_TREE;\r
+ this._flags &= ~X_Node_State.IN_TREE & ~X_Node_State.IE4_TEXTNODE_EXIST;\r
this._xnodes && X_Node_toggleInTreeFlag( this._xnodes, false );\r
\r
- X_Node_reserveRemoval[ X_Node_reserveRemoval.length ] = this;\r
- X_Node_reserveUpdate();\r
+ //if( ( elm = this._rawObject ) && elm.parentNode && elm.parentNode.tagName ){\r
+ X_Node_reserveRemoval[ X_Node_reserveRemoval.length ] = this;\r
+ X_Node_reserveUpdate(); \r
+ //};\r
};\r
return this;\r
};\r
};\r
elm && this._listeners && this.unlisten(); // イベントの退避\r
\r
- delete X_Node_CHASHE[ this._uid ];\r
- delete this._flags;\r
- \r
if( this._flags & X_Node_State.IN_TREE ){\r
!isChild && this.remove();\r
+ delete this._flags;\r
} else {\r
this.parent && this.parent._xnodes.splice( this.parent._xnodes.indexOf( this ), 1 );\r
elm && !isChild && X_Node__actualRemove( this );\r
this.kill();\r
};\r
+ \r
+ delete X_Node_CHASHE[ this._uid ];\r
};\r
\r
-function X_Node_onKill( e ){\r
+function X_Node_onBeforeKill( e ){\r
var elm = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
\r
delete X_Node_CHASHE[ this._uid ];\r
- delete this._flags;\r
\r
- if( this._flags & X_Node_State.IN_TREE ){\r
- this.remove();\r
- } else {\r
- this.parent && this.parent._xnodes.splice( this.parent._xnodes.indexOf( this ), 1 );\r
- elm && X_Node__actualRemove( this );\r
+ this.remove();\r
+ \r
+ if( elm && elm.parentNode && elm.parentNode.tagName ){\r
+ delete this._flags;\r
+ return X.Callback.PREVENT_DEFAULT;\r
};\r
};\r
\r
\r
if( !this._tag ){\r
if( this._text !== text ){\r
- text ? ( this._text = text ) : delete this.text;\r
+ text ? ( this._text = text ) : delete this._text;\r
this._flags |= X_Node_State.DIRTY_CONTENT; \r
this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate();\r
};\r
for( ; i; ){\r
xnode = removal[ --i ];\r
X_Node__actualRemove( xnode );\r
- !X_Node_body._flags && xnode.kill();\r
+ X_Node_body._flags && !xnode._flags && xnode.kill();\r
};\r
removal.length = 0;\r
};\r
X_UA_DOM.W3C ?\r
( function( that, parentElement, nextElement ){\r
var elm = that._rawObject,\r
- xnodes, l, i, frg, next, k, v;\r
-\r
- if( X_Node_displayNoneFixForIE5 && that._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
- // filter の効いている要素だけdisplay:none が無視される模様。filter を切ればよい?\r
- // 親が、display:none の場合は?\r
- elm && elm.parentNode && X_Node__actualRemove( that );\r
- return nextElement;\r
+ xnodes, l, next;\r
+\r
+ if( X_Node_displayNoneFixForIE5 ){\r
+ // filter の効いている要素を含む要素は display:none が無視される。\r
+ // filter = '' で削除はできるが、再表示時に filter が消える。 -> filter な要素を削除してしまう。\r
+ if( that._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
+ elm && elm.parentNode && X_Node__actualRemove( that );\r
+ return nextElement;\r
+ };\r
};\r
\r
if( !elm || ( parentElement && elm.parentNode !== parentElement ) || ( nextElement && elm.nextSibling !== nextElement ) ){\r
parentElement.insertBefore( X_Node__actualCreate( that ), nextElement ) :\r
parentElement.appendChild( X_Node__actualCreate( that ) );\r
X_Node__afterActualCreate( that );\r
-\r
return elm || that._rawObject;\r
} else\r
if( ( xnodes = that._xnodes ) && ( l = xnodes.length ) ) {\r
\r
delete that._fontSize;\r
\r
- if( that._flags & X_Node_BitMask_IS_DIRTY ){\r
- X_Node__updateRawNode( that, elm );\r
- } else\r
- if( that._tag && X_Node_displayNoneFixForIE5 && elm.currentStyle.display === 'none' ){\r
- // TODO 親要素への変更で display:none が変わる場合もあるのでここで調べる\r
- };\r
- \r
- if( X_Node_displayNoneFixForIE5 && that._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
+ that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
+\r
+ // ie5 only\r
+ // 親及び自身へのクラス・id指定で display : none になるケースもある\r
+ if( X_Node_displayNoneFixForIE5 && that._tag && elm.currentStyle.display === 'none' ){\r
+ X_Node__actualRemove( that );\r
return nextElement;\r
};\r
return elm;\r
that._className ? ( elm.className = that._className ) : ( elm.className && elm.removeAttribute( X_UA.IE5678 ? 'className' : 'class' ) ); // className は ie7-? \r
};\r
\r
- // ie5 only\r
- // TODO 親へのクラス・id指定で display : none になるケースもある\r
- if( X_Node_displayNoneFixForIE5 && elm.currentStyle.display === 'none' ){\r
- X_Node__actualRemove( that );\r
- that._flags |= X_Node_State.STYLE_IS_DISPLAY_NONE;\r
- return;\r
- }; \r
- \r
- if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
- elm.style.filter = X_Node_CSS_objToIEFilterText( that );;\r
- };\r
+ // TODO display:none の場合、更新をスキップ\r
\r
// attr\r
- // TODO display:none の場合、更新をスキップ\r
if( that._flags & X_Node_State.DIRTY_ATTR && ( attrs = that._newAttrs || that._attrs ) ){\r
rename = X_Node_Attr_renameForDOM;\r
\r
};\r
\r
// style\r
- // TODO display:none の場合、更新をスキップ\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
+ if( !elm.style ) alert(that.call('outerHTML'));\r
X_UA.Opera78 || X_UA.NN6 ?\r
elm.setAttribute( 'style', that._cssText ) : // opera8用\r
( elm.style.cssText = that._cssText );\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
+ //alert( 'updateraw ' + that.call('outerHTML') );\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
\r
that._flags &= X_Node_BitMask_RESET_DIRTY;\r
};\r
\r
if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
- that._rawObject.style.filter = X_Node_CSS_objToIEFilterText( that );;\r
+ that._rawObject.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
\r
// attr\r
if( !that._tag ){\r
if( elm ) return elm;\r
that._flags &= X_Node_BitMask_RESET_DIRTY;\r
+ //console.log( 'create ' + that._text );\r
+ console.log( document.createTextNode( X_String_chrReferanceTo( that._text ) ) );\r
return that._rawObject = document.createTextNode( X_String_chrReferanceTo( that._text ) );\r
};\r
\r
that._cssText ? ' style="' + that._cssText + '"' : '',\r
'>' ].join( '' ) ) :\r
document.createElement( that._tag );\r
- \r
- \r
- console.log( '##' + that._attrText + '##' );\r
};\r
if( X_Node_useDocumentFragment ){\r
if( ( xnodes = that._xnodes ) && ( l = xnodes.length ) ){\r
\r
var X_Node__afterActualCreate =\r
X_UA_DOM.W3C ? (function( that ){\r
- var elm = that._rawObject, xnodes, l, i;\r
+ var elm = that._rawObject, xnodes, l, i, v;\r
\r
if( !that._tag ){\r
that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
xnodes = that._xnodes;\r
l = xnodes && xnodes.length;\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
- if( !X_Node_useDocumentFragment ){// docFrg が使えない場合、doc 追加後に子を追加\r
+ if( !X_Node_useDocumentFragment ){// docFrg が使えない場合、doc 追加後に子を追加 TODO ie の場合この順序(メモリリーク対策)、他のブラウザは 子が先が有利では?\r
for( i = 0; i < l; ++i ){\r
elm.appendChild( X_Node__actualCreate( xnodes[ i ], true ) );\r
- X_Node__afterActualCreate( xnodes[ i ] );\r
+ /* X_Node__afterActualCreate( xnodes[ i ] ); */\r
};\r
- } else {\r
+ /*} else { \r
for( i = 0; i < l; ++i ){\r
X_Node__afterActualCreate( xnodes[ i ] );\r
- };\r
+ }; */\r
};\r
\r
if( X_Node_strictElmCreation ){\r
if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
- elm.style.filter = X_Node_CSS_objToIEFilterText( that );;\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
that._flags &= X_Node_BitMask_RESET_DIRTY;\r
} else {\r
\r
that._flags ^= X_Node_State.ELM_NEED_INIT;\r
} else {\r
- \r
+ /*\r
for( i = 0; i < l; ++i ){\r
X_Node__afterActualCreate( xnodes[ i ] );\r
- };\r
+ }; */\r
// 親要素の updateRawNode 前に子要素の updateRawNode を行う\r
- // 親要素が GPU レイヤーに転送されるケースがあるので、先に子要素の変更を済ませる\r
+ // 親要素が GPU レイヤーに転送されるケースがあるので、先に子要素の変更を済ませる <- コレ間違いでは? css 設定後の script 終了後ではないか?\r
that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
}; \r
\r
- // src の onload があるので先ではないか?\r
- // TODO ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
- X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
+ for( i = 0; i < l; ++i ){\r
+ X_Node__afterActualCreate( xnodes[ i ] );\r
+ };\r
+\r
}) :\r
X_UA_DOM.IE4 ? (function( that ){\r
- var xnodes, i;\r
+ var xnodes, i, v;\r
that._flags |= X_Node_State.IE4_TEXTNODE_EXIST;\r
\r
if( !that._tag ) return that;\r
};\r
};\r
if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
- X_Node__ie4getRawNode( that ).style.filter = X_Node_CSS_objToIEFilterText( that );;\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
};\r
that._flags &= X_Node_BitMask_RESET_DIRTY;\r
X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
};\r
\r
if( !elm ) return;\r
+ \r
that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
+ \r
+ // ie5では filter の効いている要素をremove時に破棄して、再度append 時に新規生成する\r
+ // ちなみに elm.filters に触ると ie8 でなぜかカラム落ちが発生、、、\r
+ if( X_Node_displayNoneFixForIE5 ){\r
+ if( elm.filters && elm.filters.length ){\r
+ isChild = false;\r
+ delete that._rawObject;\r
+ };\r
+ };\r
+ \r
if( !X_UA.MacIE ){\r
// elm.parentNode.tagName for ie7\r
!isChild && elm.parentNode && elm.parentNode.tagName && elm.parentNode.removeChild( elm );\r
* getBoundingClientRect\r
*/\r
Node.prototype.width = function(){\r
- if( !this.parent ){// todo : _state で tree に所属しているか?判定\r
- console.log( 'xnode.width() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.width() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'width' );\r
return this._rawObject.offsetWidth;\r
};\r
\r
Node.prototype.height = function(){\r
- if( !this.parent ){\r
- console.log( 'xnode.height() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.height() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'height' );\r
return this._rawObject.offsetHeight;\r
};\r
\r
Node.prototype.clientWidth = function(){\r
- if( !this.parent ){// todo : _state で tree に所属しているか?判定\r
- console.log( 'xnode.width() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.width() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'width' );\r
return this._rawObject.clientWidth;\r
};\r
\r
Node.prototype.clientHeight = function(){\r
- if( !this.parent ){\r
- console.log( 'xnode.height() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.height() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'height' );\r
return this._rawObject.clientHeight;\r
};\r
\r
Node.prototype.scrollWidth = function(){\r
- if( !this.parent ){// todo : _state で tree に所属しているか?判定\r
- console.log( 'xnode.width() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.width() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'width' );\r
return this._rawObject.scrollWidth;\r
};\r
\r
Node.prototype.scrollHeight = function(){\r
- if( !this.parent ){\r
- console.log( 'xnode.height() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.height() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+\r
if( X_UA_DOM.W3C ){\r
- // this.css( X_Node_CSS_Unit.px, 'height' );\r
return this._rawObject.scrollHeight;\r
} else\r
if( X_UA_DOM.IE4 ){\r
};\r
\r
Node.prototype.scrollLeft = function(){\r
- if( !this.parent ){// todo : _state で tree に所属しているか?判定\r
- console.log( 'xnode.scrollLeft() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.scrollLeft() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+\r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'width' );\r
return this._rawObject.scrollLeft;\r
};\r
\r
Node.prototype.scrollTop = function(){\r
- if( !this.parent ){// todo : _state で tree に所属しているか?判定\r
- console.log( 'xnode.scrollTop() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.scrollTop() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
if( X_UA_DOM.W3C ){\r
// this.css( X_Node_CSS_Unit.px, 'width' );\r
return this._rawObject.scrollTop;\r
*/\r
// X_Node_CSS_transform,\r
Node.prototype.x = function(){\r
- if( !this.parent ){\r
- console.log( 'xnode.x() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.x() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \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
} else\r
if( X_UA_DOM.IE4 ){\r
+ // pixelLeft http://www.din.or.jp/~hagi3/JavaScript/JSTips/DHTML/ProbIE5.htm\r
return ( this._rawObject || X_Node__ie4getRawNode( this ) ).offsetLeft;\r
} else {\r
\r
};\r
\r
Node.prototype.y = function(){\r
- if( !this.parent ){\r
- console.log( 'xnode.y() : no parent' );\r
- return 0;\r
- };\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \r
X_Node_updateTimerID && X_Node_startUpdate();\r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.y() : not belong tree.' );\r
- return 0;\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
+ \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
};\r
\r
Node.prototype.offset = function( /* xnodeParent */ ){\r
- var x = 0, y = 0, elm;\r
- \r
- if( !this.parent ){\r
- console.log( 'xnode.offset() : no parent' );\r
- return { x : 0, y : 0 };\r
- };\r
- \r
- if( ( this._flags & X_Node_State.IN_TREE ) === 0 ){\r
- console.log( 'xnode.offset() : not belong tree.' );\r
- return { x : 0, y : 0 };\r
- };\r
- if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return { x : 0, y : 0 };\r
+\r
+ if( ( this._flags & X_Node_State.IN_TREE ) === 0 || this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return { x : 0, y : 0 };\r
\r
if( X.Doc.body === this || X.Doc.html === this ){\r
return { x : 0, y : 0 };\r
X_Node_updateTimerID && X_Node_startUpdate();\r
\r
if( X_UA_DOM.W3C ){\r
- elm = this._rawObject;\r
+ return X_Node_getPosition( this._rawObject );\r
} else\r
if( X_UA_DOM.IE4 ){\r
- elm = this._rawObject || X_Node__ie4getRawNode( this ); \r
+ return X_Node_getPosition( this._rawObject || X_Node__ie4getRawNode( this ) );\r
} else {\r
\r
};\r
- \r
- return X_Node_getPosition( elm );\r
};\r
\r
// エレメントの座標取得 ~スクロール要素~\r