_rect : null, // \r
_fontSize : 0,\r
\r
+ length : 1,\r
parent : null, // remove された枝も親子構造は維持している。\r
_xnodes : null, // Array.<Node>\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
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( 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
// 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
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( l ){\r
return nextElement;\r
};\r
elm && ( elm.style.display = 'none' );\r
- return elm || nextElement;\r
- }; \r
+ return elm.nextSibling === nextElement ? elm : nextElement;\r
+ };\r
\r
// 5. ie5 非表示fixフラグ\r
accumulatedFlags |= that._flags;\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.DIRTY_CSS && X_Node_CSS_objToCssText( that, true );\r
nextElement ?\r
parentElement.insertBefore( elm, nextElement ) :\r
parentElement.appendChild( elm );\r
- //elm.UID = that._uid;\r
- // src の onload があるので先ではないか?\r
- // TODO ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
- X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
};\r
\r
if( that._tag ){\r
+ // src の onload があるので先ではないか?\r
+ // TODO ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
+ X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰 \r
+ \r
if( X_Node_documentFragment ){\r
//( frg = X_Node_documentFragment ).appendChild( elm );\r
};\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
parentElement.insertBefore( elm, nextElement ) :\r
parentElement.appendChild( elm );\r
\r
- X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\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
return prevElement;\r
};\r
};\r
- return elm || prevElement;\r
+ return elm || nextElement;\r
};\r
\r
if( !elm ){\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
// attr\r
case 'IFRAMEsrc' :\r
// http://outcloud.blogspot.jp/2010/09/iframe.html\r
// この問題は firefox3.6 で確認\r
- if( X_UA.Gecko ){\r
+ if( X_UA.Gecko && elm.contentWindow ){\r
elm.contentWindow.location.replace = elm.src = v || '';\r
continue;\r
};\r