EXIST : 0x1,\r
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
- STYLE_IS_POS_ABSOLUTE : 2 << 4, // position : absolute\r
- STYLE_IS_NO_OVERFLOW : 2 << 5, // overflow : hidden\r
- STYLE_IS_WIDTH_LENGTH : 2 << 6, // width : width() のための commitUpdate が不要\r
- STYLE_IS_WIDTH_PCT : 2 << 7, // width : width() のための commitUpdate が不要かもしれない。(親で LENGTH が指定されているなら)\r
- STYLE_IS_HEIGHT_LENGTH : 2 << 8, // height :\r
- STYLE_IS_HEIGHT_PCT : 2 << 9, // height :\r
- STYLE_IS_FONT_LENGTH : 2 << 10, // fontSize :\r
- STYLE_IS_FONT_PCT : 2 << 11, // fontSize :\r
-\r
- //DIRTY_CHILD : 2 << 18, // 使っていない\r
+ STYLE_IS_DISPLAY_NONE : 2 << 1, // display : none \r
+ 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_PCT : 2 << 6, // width : width() のための commitUpdate が不要かもしれない。(親で LENGTH が指定されているなら)\r
+ STYLE_IS_HEIGHT_LENGTH : 2 << 7, // height :\r
+ STYLE_IS_HEIGHT_PCT : 2 << 8, // height :\r
+ STYLE_IS_FONT_LENGTH : 2 << 9, // fontSize :\r
+ STYLE_IS_FONT_PCT : 2 << 10, // fontSize :\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_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
\r
- OLD_ATTRTEXT : 2 << 18,\r
- OLD_CSSTEXT : 2 << 19,\r
+ \r
+ ELM_NEED_INIT : 2 << 18,\r
+ OLD_ATTRTEXT : 2 << 19,\r
+ OLD_CSSTEXT : 2 << 20,\r
\r
// filter 要素が親子になると不具合が出るのを検出\r
- IE_FILTER_NOW : 2 << 20,\r
+ IE_FILTER_NOW : 2 << 21,\r
\r
- GPU_WAITING : 2 << 20, // 1:子の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_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
\r
- IE5_DISPLAY_NONE_FIX : X_UA.IE5 && X_UA.ActiveX ? 2 << 24 : 0,\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
\r
- IE4_HAS_TEXTNODE : X_UA.IE4 ? 2 << 20 : 0,\r
- IE4_HAS_ELEMENT : X_UA.IE4 ? 2 << 21 : 0,\r
- IE4_DIRTY_CHILDREN : X_UA.IE4 ? 2 << 22 : 0,\r
- IE4_FIXED : X_UA.IE4 ? 2 << 23 : 0\r
+ IE5_DISPLAY_NONE_FIX : X_UA.IE5 && X_UA.ActiveX ? 2 << 25 : 0\r
},\r
\r
X_Node_BITMASK_RESET_STYLE = ( ( 2 << 29 ) - 1 + ( 2 << 29 ) ) ^ (\r
X_Node_State.STYLE_IS_FONT_LENGTH |\r
X_Node_State.STYLE_IS_FONT_PCT ),\r
\r
- X_Node_BitMask_IS_DIRTY = \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
\r
X_Node_strictElmCreation = !X_UA.MacIE && X_UA.IE5678,// && !X_UA.MacIE;\r
\r
- X_Node_useDocumentFragment = 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
\r
- X_Node_displayNoneFixForIE5 = X_Node_State.IE5_DISPLAY_NONE_FIX,\r
+ X_Node_displayNoneFixForIE5 = !!X_Node_State.IE5_DISPLAY_NONE_FIX,\r
\r
X_Node_newByTag = false,\r
\r
\r
before : X_Node_before, // remove\r
\r
- prevNode : X_Node_before, // -> prev\r
+ prev : X_Node_before,\r
\r
after : X_Node_after, // remove\r
\r
- nextNode : X_Node_after, // -> next\r
- \r
- replace : X_Node_swap, // remove\r
+ next : X_Node_after,\r
\r
swap : X_Node_swap,\r
\r
var i = xnodes.length, xnode;\r
for( ; i; ){\r
xnode = xnodes[ --i ];\r
- flag ? ( xnode._flags |= X_Node_State.IN_TREE ) : ( xnode._flags &= ~X_Node_State.IN_TREE );\r
+ flag ? ( xnode._flags |= X_Node_State.IN_TREE | X_Node_State.DIRTY_POSITION ) : ( xnode._flags &= ~X_Node_State.IN_TREE & ~X_Node_State.IE5_DISPLAY_NONE_FIX );\r
xnode._xnodes && X_Node_toggleInTreeFlag( xnode._xnodes, flag );\r
};\r
};\r
v = this.html();\r
X_Node_outerXNode = null;\r
return v;\r
+ case 'fontSize' :\r
+ return X_Node_CSS_getCharSize( this );\r
+ case 'inGPU' :\r
+ return !!( this._flags & ( X_Node_State.GPU_NOW | X_Node_State.GPU_RELEASE_RESERVED ) );\r
};\r
\r
raw = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\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
+ * 3. GPU予約 -> GPU\r
+ * 4. style="display:none" の場合、これ以下の変更を行わない。\r
+ * 5. ie5 非表示フラグが立っていて、親と自身の class・id によって非表示になっていて、親と自身に変更がない。accumulatedFlags を使用。\r
+ * -> TODO これ TREE の変更を検出できない。 remove したときに 子まで X_Node_State.IE5_DISPLAY_NONE_FIXを落とす。\r
+ * 6. 要素の生成\r
+ * 7. 要素の位置のズレを補正\r
+ * 8. 更新の適用\r
+ * 9. ie5 親及び自身へのクラス・id指定で display:none になるケースがありそれを検出。\r
+ * このままでは、生成と破棄が繰り返されてしまうので親と自身のクラス・idが変わった場合、ツリー位置の変化があった場合に再生する。\r
+ */\r
var X_Node__commitUpdate =\r
X_UA_DOM.W3C ?\r
( function( that, parentElement, nextElement, accumulatedFlags ){\r
var elm = that._rawObject,\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
+ // 1. GPU 一切の更新をスキップ\r
if( that._flags & X_Node_State.GPU_NOW ){\r
- // 一切の更新をスキップ\r
- // return nextElement;\r
+ console.log( '更新のskip ' + !!( that._flags & X_Node_BitMask_IS_DIRTY ) );\r
+ that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
+ return elm;\r
};\r
\r
- accumulatedFlags |= that._flags;\r
- \r
+ // 2. GPU解放予約\r
+ // TODO もしかしたらこのタイミングで更新できるかも。\r
if( that._flags & X_Node_State.GPU_RELEASE_RESERVED ){\r
- // 子要素の更新をスキップ\r
- // 自身の更新のみ -> 更新の予約\r
- // X_Node_updateReservedByReleaseGPU = true;\r
- // xnode._flags &= X_Node_BitMask_RESET_GPU;\r
- } else {\r
- // ここへ\r
+ console.log( 'GPU 解放 ' );\r
+ //X_Node_updateReservedByReleaseGPU = true;\r
+ //X_Node__updateRawNode( that, elm );\r
+ that._flags &= X_Node_BitMask_RESET_GPU;\r
+ //return elm;\r
};\r
- \r
- // 要素が存在しない、または要素の位置のズレを補正\r
- if( !elm || elm.parentNode !== parentElement || ( nextElement && elm.nextSibling !== nextElement ) ){\r
- /*\r
- * if( xnode._flags & X_Node_State.IE5_DISPLAY_NONE_FIX && ( accumulatedFlags & ( X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME ) === 0 ) ) return nextElement;\r
- */\r
- nextElement ?\r
- parentElement.insertBefore( X_Node__actualCreate( that, false ), nextElement ) :\r
- parentElement.appendChild( X_Node__actualCreate( that, false ) );\r
- X_Node__afterActualCreate( that );\r
- return elm || that._rawObject;\r
- } else\r
- if( ( xnodes = that._xnodes ) && ( l = xnodes.length ) ) {\r
- for( ; l; ){\r
- next = X_Node__commitUpdate( xnodes[ --l ], elm, next, accumulatedFlags );\r
- };\r
- };\r
- \r
- if( accumulatedFlags & X_Node_BitMask_IS_DIRTY ) delete that._fontSize;\r
- // ここまで\r
-\r
- that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
\r
+ // 3. GPU予約 -> GPU\r
if( that._flags & X_Node_State.GPU_RESERVED ){\r
- // xnode._flags &= X_Node_BitMask_RESET_GPU;\r
- // xnode._flags |= X_Node_State.GPU_NOW;\r
+ that._flags &= X_Node_BitMask_RESET_GPU;\r
+ that._flags |= X_Node_State.GPU_NOW;\r
};\r
\r
- // ie5 only\r
- // 親及び自身へのクラス・id指定で display : none になるケースもある\r
+ // 4. style="display:none" の場合\r
+ if( that._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
+ if( X_Node_displayNoneFixForIE5 ){\r
+ // filter の効いている要素を含む要素は display:none が無視される。\r
+ // filter = '' で削除はできるが、再表示時に filter が消える。 -> filter な要素を削除してしまう。 \r
+ elm && elm.parentNode && X_Node__actualRemove( that );\r
+ return nextElement;\r
+ };\r
+ elm && ( elm.style.display = 'none' );\r
+ return 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
+ \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
+ // 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
+ \r
+ // 9. ie5 only\r
+ // 親及び自身へのクラス・id指定で display : none になるケースがありそれを検出\r
// 生成と破棄が繰り返されてしまう、親と自身の id, class が変わった場合だけ再生成。 accumulatedFlags & ( ID | CLASSNAME )\r
if( X_Node_displayNoneFixForIE5 && that._tag ){\r
if( elm.currentStyle.display === 'none' ){\r
X_Node__actualRemove( that );\r
- // X_Node_State.IE5_DISPLAY_NONE_FIX -> swap で落とす\r
+ that._flags |= X_Node_State.IE5_DISPLAY_NONE_FIX;\r
return nextElement; \r
} else {\r
- // xnode._flags &= ~X_Node_State.IE5_DISPLAY_NONE_FIX\r
+ that._flags &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;\r
};\r
};\r
\r
- console.log( that.call('outerHTML') );\r
- \r
+ // 10. 子要素の更新。\r
+ if( ( xnodes = that._xnodes ) && ( l = xnodes.length ) ) {\r
+ for( ; l; ){\r
+ next = X_Node__commitUpdate( xnodes[ --l ], elm, next, accumulatedFlags );\r
+ };\r
+ };\r
+\r
return elm;\r
}) :\r
X_UA_DOM.IE4 ? \r
xnodes, l, i, dirty, mix, html, text, prev;\r
\r
if( !that._tag ){\r
- that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
+ that._flags & X_Node_State.DIRTY_CONTENT && X_Node__updateRawNode( that, elm );\r
return elm;\r
};\r
\r
\r
if( accumulatedFlags & X_Node_BitMask_IS_DIRTY ) delete that._fontSize;\r
\r
+ that._flags &= ~X_Node_State.DIRTY_POSITION;\r
that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
return elm;\r
}) :\r
\r
// textNode\r
if( !that._tag ){\r
- console.log( that.parent.call('outerHTML') );\r
elm.data = X_String_chrReferanceTo( that._text );\r
that._flags &= X_Node_BitMask_RESET_DIRTY;\r
return;\r
that._className ? ( elm.className = that._className ) : ( elm.className && elm.removeAttribute( X_UA.IE5678 ? 'className' : 'class' ) ); // className は ie7-? \r
};\r
\r
- // TODO display:none の場合、更新をスキップ\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
\r
for( k in attrs ){\r
//if( X_EMPTY_OBJECT[ k ] ) continue;\r
- // TODO IE では input, なぜか button, object も type の変更が出来ない、同値で置き換えようとしても不可\r
+ // TODO IE では input, なぜか button, object も type, name の変更が出来ない、同値で置き換えようとしても不可\r
( v = attrs[ k ] ) === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
( elm[ rename[ k ] || k ] = X_Node_Attr_noValue[ k ] ? k : v );\r
* title、className、id、lang、language には setAttribute でなく、element.id で直接読み書きできる\r
*/ \r
// id\r
- if( that._flags & X_Node_State.DIRTY_ID ) elm.setAttribute( 'id', that._id || ( 'ie4uid' + xnode._uid ) );\r
+ if( that._flags & X_Node_State.DIRTY_ID ) elm.setAttribute( 'id', that._id || ( 'ie4uid' + that._uid ) );\r
\r
// className\r
if( that._flags & X_Node_State.DIRTY_CLASSNAME ){\r
*/\r
var X_Node__actualCreate =\r
X_UA_DOM.W3C ? (function( that, isChild ){\r
- var elm = that._rawObject,\r
- xnodes, frg, i, l;\r
+ var elm = that._rawObject, xnodes, frg, i, l;\r
\r
if( !that._tag ){\r
- if( elm ) return elm;\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
if( !elm ){\r
that._flags & X_Node_State.DIRTY_CSS && X_Node_CSS_objToCssText( that, true );\r
\r
- that._flags |= X_Node_State.ELM_NEED_INIT;\r
that._rawObject = elm =\r
X_Node_strictElmCreation ?\r
document.createElement( [\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_useDocumentFragment ){\r
+ if( X_Node_documentFragment ){\r
if( ( xnodes = that._xnodes ) && ( l = xnodes.length ) ){\r
- !isChild && ( frg = X_Node_useDocumentFragment ).appendChild( elm );\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
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
- return that;\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
+\r
if( that._flags & X_Node_State.ELM_NEED_INIT ){\r
- if( !X_Node_useDocumentFragment ){// docFrg が使えない場合、doc 追加後に子を追加 TODO ie の場合この順序(メモリリーク対策)、他のブラウザは 子が先が有利では?\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
\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
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
};\r
};\r
};\r
- \r
- that._flags ^= X_Node_State.ELM_NEED_INIT;\r
} else {\r
that._flags & X_Node_BitMask_IS_DIRTY && X_Node__updateRawNode( that, elm );\r
};\r
X_Node__afterActualCreate( xnodes[ i ] );\r
};\r
\r
+ return elm;\r
}) :\r
X_UA_DOM.IE4 ? (function( that ){\r
var xnodes, i, v;\r
// > TagName|*\r
case 2 :\r
for( ; i < l; ++i ){\r
- for( xnode = parents[ i ].firstChild(); xnode; xnode = xnode.nextNode() ){\r
+ for( xnode = parents[ i ].firstChild(); xnode; xnode = xnode.next() ){\r
if( xnode._tag && ( isAll || tagName === xnode._tag ) ) xnodes[ ++n ] = xnode;\r
}; \r
};\r
// + TagName|*\r
case 3 :\r
for( ; i < l; ++i ){\r
- for( xnode = parents[ i ].nextNode(); xnode; xnode = xnode.nextNode() ){\r
+ for( xnode = parents[ i ].next(); xnode; xnode = xnode.next() ){\r
if( xnode._tag ){\r
if( isAll || tagName === xnode._tag ) xnodes[ ++n ] = xnode;\r
break;\r
case 4 :\r
merge = {};\r
for( ; i < l; ++i ){\r
- for( xnode = parents[ i ].nextNode(); xnode; xnode = xnode.nextNode() ){\r
+ for( xnode = parents[ i ].next(); xnode; xnode = xnode.next() ){\r
if( xnode._tag && ( isAll || tagName === xnode._tag ) ){\r
uid = xnode._uid;\r
if( merge[ uid ] ){\r
tagName = flag_all || xnode._tag;\r
tmp = null;\r
if( /* tmp === null && */ type <= 0 ){\r
- for( node = xnode.prevNode(); node; node = node.prevNode() ){\r
+ for( node = xnode.prev(); node; node = node.prev() ){\r
if( node._tag && ( flag_all || tagName === node._tag ) ){\r
tmp = false;\r
break;\r
};\r
};\r
if( tmp === null && 0 <= type ){\r
- for( node = xnode.nextNode(); node; node = node.nextNode() ){\r
+ for( node = xnode.next(); node; node = node.next() ){\r
if( node._tag && ( flag_all || tagName === node._tag ) ){\r
tmp = false;\r
break;\r
m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorChild( 0, false, flags, xnodes ); }\r
},\r
'nth-child' : {\r
- m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'firstChild', 'nextNode', true, flags, xnodes, a, b ); }\r
+ m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'firstChild', 'next', true, flags, xnodes, a, b ); }\r
},\r
'nth-last-child' : {\r
- m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'lastChild', 'prevNode', true, flags, xnodes, a, b ); }\r
+ m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'lastChild', 'prev', true, flags, xnodes, a, b ); }\r
},\r
'nth-of-type' : {\r
- m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'firstChild', 'nextNode', false, flags, xnodes, a, b ); }\r
+ m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'firstChild', 'next', false, flags, xnodes, a, b ); }\r
},\r
'nth-last-of-type' : {\r
- m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'lastChild', 'prevNode', false, flags, xnodes, a, b ); }\r
+ m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'lastChild', 'prev', false, flags, xnodes, a, b ); }\r
},\r
empty : {\r
m : function( flags, xnodes ){\r