X_Node_CHASHE[ this._uid = uid ] = this;\r
},\r
\r
+ // attr\r
+ // css, cssText\r
+ // find\r
+ // animate, stop\r
+ \r
create : X_Node_create,\r
\r
createAt : X_Node_createAt,\r
*/\r
function X_Node_contains( v ){\r
var elm, type, xnodes, i;\r
- if( !v || this._xnodeType !== 1 ) return false;\r
+ if( !v || this._xnodeType !== 1 || this === v ) return false;\r
// contains ie4+\r
if( ( elm = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this ) ) && document.contains && ( type = X_Node_getType( v ) ) && ( type === X_Node_TYPE.RAW_HTML || type === X_Node_TYPE.RAW_TEXT ) ){\r
return elm.contains( v ); \r
xnodes = this._xnodes;\r
if( !xnodes || !xnodes.length ) return false;\r
if( xnodes.indexOf( v ) !== -1 ) return true; // fast\r
- if( elm === v.parentNode ) return false;\r
+ if( elm === v.parentNode ) return true;\r
for( i = xnodes.length; i; ){\r
if( xnodes[ --i ].contains( v ) ) return true;\r
};\r
\r
/* --------------------------------------\r
* html, text\r
+ * \r
+ * outerHTML が欲しい場合は、xnode.attr('outerHTML') とできる。\r
*/\r
-\r
function X_Node_html( html ){\r
var _ = '', q = '"', xnodes, n, i, l;\r
// setter\r
};\r
};\r
\r
- // style\r
- // TODO display:none の場合、更新をスキップ\r
- if( that._dirty & X_Node_Dirty.CSS ){\r
- if( that._cssText !== null || ( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\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
- };\r
- \r
if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
elm.style.filter = X_Node_CSS_objToIEFilterText( that );;\r
};\r
// TODO display:none の場合、更新をスキップ\r
if( that._dirty & X_Node_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
- if( !X_UA.MacIE && ( X_UA.IE5 || X_UA.IE55 ) ){ // IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
- if( that._tag === 'TEXTAREA' && k === 'value' ){\r
- elm.firstChild ?\r
- ( elm.firstChild.data = attrs[ k ] ) :\r
- elm.appendChild( document.createTextNode( attrs[ k ] ) );\r
- continue;\r
- };\r
- };\r
- // TODO IE では input, なぜか buttonも、type の変更が出来ない、object も 同値で置き換えようとしても不可\r
+ //if( X_EMPTY_OBJECT[ k ] ) continue;\r
+ // TODO IE では input, なぜか button, object も type の変更が出来ない、同値で置き換えようとしても不可\r
( v = attrs[ k ] ) === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
- ( elm[ rename[ k ] || k ] = X_Node_Attr_noValue[ k ] ? k : v ); \r
-\r
+ ( elm[ rename[ k ] || k ] = X_Node_Attr_noValue[ k ] ? k : v );\r
};\r
delete that._newAttrs;\r
};\r
\r
+ // style\r
+ // TODO display:none の場合、更新をスキップ\r
+ if( that._dirty & X_Node_Dirty.CSS ){\r
+ if( that._cssText !== null || ( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\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
+ };\r
+ \r
delete that._dirty;\r
}) :\r
X_UA_DOM.IE4 ? \r
if( that._dirty & X_Node_Dirty.ATTR && ( attrs = that._newAttrs || that._attrs ) ){\r
rename = X_Node_Attr_renameForDOM;\r
for( k in attrs ){\r
+ //if( X_EMPTY_OBJECT[ k ] ) continue;\r
( v = attrs[ k ] ) === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
//that._tag === 'TEXTAREA' && k === 'value' ?\r
\r
var X_Node__afterActualCreate =\r
X_UA_DOM.W3C ? (function( that ){\r
- var elm = that._rawObject, xnodes, l, attrs, k, i;\r
+ var elm = that._rawObject, xnodes, l, i;\r
\r
that._root = that.parent._root;\r
\r
l = xnodes && xnodes.length;\r
\r
if( that._isNew ){\r
- if( !X_Node_useDocumentFragment && l ){// docFrg が使えない場合、doc 追加後に子を追加\r
+ if( !X_Node_useDocumentFragment /*&& l*/ ){// docFrg が使えない場合、doc 追加後に子を追加\r
for( i = 0; i < l; ++i ){\r
elm.appendChild( X_Node__actualCreate( xnodes[ i ], true ) );\r
+ X_Node__afterActualCreate( xnodes[ i ] );\r
+ };\r
+ } else {\r
+ for( i = 0; i < l; ++i ){\r
+ X_Node__afterActualCreate( xnodes[ i ] );\r
};\r
};\r
+ \r
if( X_Node_strictElmCreation ){\r
if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
elm.style.filter = X_Node_CSS_objToIEFilterText( that );;\r
that._newAttrs = that._attrs;\r
that._dirty = X_Node_Dirty.ID | X_Node_Dirty.CLASSNAME | X_Node_Dirty.CSS | X_Node_Dirty.ATTR | X_Node_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
\r
delete that._isNew;\r
} else {\r
+ \r
+ for( i = 0; i < l; ++i ){\r
+ X_Node__afterActualCreate( xnodes[ i ] );\r
+ };\r
+ // 親要素の updateRawNode 前に子要素の updateRawNode を行う\r
+ // 親要素が GPU レイヤーに転送されるケースがあるので、先に子要素の変更を済ませる\r
that._dirty && X_Node__updateRawNode( that, elm );\r
- };\r
- \r
- for( i = 0; i < l; ++i ){\r
- X_Node__afterActualCreate( xnodes[ i ] );\r
- };\r
+ }; \r
+\r
// src の onload があるので先ではないか?\r
// TODO ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r