/**\r
* NodeList と動作を一致させるためのプロパティ。常に 1。\r
* @type {number}\r
- * @private\r
* @alias Node.prototype.length\r
*/\r
length : 1,\r
/**\r
* 親 Node。\r
* @type {Node}\r
- * @private\r
* @alias Node.prototype.parent\r
*/\r
parent : null, // remove された枝も親子構造は維持している。\r
return this;\r
case X_Node_TYPE.XNODE :\r
// 親の xnodes から v を消す\r
- v.parent && v[ 'remove' ]();\r
+ if( v.parent ){\r
+ if( v.parent === this ){\r
+ i = v[ 'getOrder' ]();\r
+ if( i === start ) return this;\r
+ if( i < start ) --start;\r
+ };\r
+ v[ 'remove' ]();\r
+ };\r
// IE4 でテキストノードの追加、FIXED 済でない場合、親に要素の追加を通知\r
if( X_UA[ 'IE4' ] && !v[ '_tag' ] && ( this[ '_flags' ] & X_Node_State.IE4_FIXED ) === 0 ) this[ '_flags' ] |= X_Node_State.IE4_DIRTY_CHILDREN;\r
break;\r
\r
\r
/**\r
- * ノードの直前の要素を取得。または直前に挿入。\r
+ * ノードの直前の要素を取得。または直前に挿入。挿入する要素が先にいる兄弟でも正しく動作する。\r
* @alias Node.prototype.prev\r
- * @param {Node|string|HTMLElement|TextNode} [v] HTMLElement と TextNode は内部のみ。\r
+ * @param {Node|string|HTMLElement|TextNode} [...v] HTMLElement と TextNode は内部のみ。\r
* @return {Node} 自身。チェインメソッド\r
* @example childNode.prev( prevNode );\r
*/\r
function X_Node_prev( v ){\r
- var parent = this.parent, xnodes, i, l, start;\r
+ var parent = this.parent, xnodes, i, l;\r
\r
// getter\r
if( v === undefined ){\r
if( !parent ) return this;\r
\r
l = arguments.length;\r
- start = this[ 'getOrder' ]();\r
if( 1 < l ){\r
- for( ; l; ){\r
- parent[ 'appendAt' ]( start, arguments[ --l ] );\r
+ for( i = 0; l; ++i ){\r
+ parent[ 'appendAt' ]( this[ 'getOrder' ]() - i, arguments[ --l ] );\r
};\r
return this;\r
};\r
- parent[ 'appendAt' ]( start, v );\r
+ parent[ 'appendAt' ]( this[ 'getOrder' ](), v );\r
return this;\r
};\r
\r
/**\r
- * ノードの直後の要素を取得。または直後に挿入。\r
+ * ノードの直後の要素を取得。または直後に挿入。挿入する要素が先にいる兄弟でも正しく動作する。\r
* @alias Node.prototype.next\r
* @param {Node|string|HTMLElement|TextNode} [v] HTMLElement と TextNode は内部のみ。\r
* @return {Node} 自身。チェインメソッド\r
\r
l = arguments.length;\r
start = this[ 'getOrder' ]() + 1;\r
+ \r
if( parent[ '_xnodes' ].length <= start ){\r
- if( 1 < l ){\r
- for( i = 0; i < l; ++i ){\r
- parent[ 'append' ]( arguments[ i ] );\r
- };\r
- return this;\r
+ for( i = 0; i < l; ++i ){\r
+ parent[ 'append' ]( arguments[ i ] );\r
};\r
- parent[ 'append' ]( v );\r
- return this;\r
- };\r
+ } else\r
if( 1 < l ){\r
for( ; l; ){\r
- parent[ 'appendAt' ]( start, arguments[ --l ] );\r
+ parent[ 'appendAt' ]( this[ 'getOrder' ]() + 1, arguments[ --l ] );\r
};\r
- return this;\r
+ } else {\r
+ parent[ 'appendAt' ]( start, v );\r
};\r
- parent[ 'appendAt' ]( start, v );\r
return this;\r
};\r
\r
return v;\r
case 'fontSize' :\r
return X_Node_CSS_getCharSize( this );\r
+ case 'GPU' :\r
+ return this[ '_flags' ] & X_Node_State.GPU_NOW ? 'NOW' :\r
+ this[ '_flags' ] & X_Node_State.GPU_RELEASE_RESERVED ? '解除予約' : '';\r
case 'inGPU' :\r
return !!( this[ '_flags' ] & ( X_Node_State.GPU_NOW | X_Node_State.GPU_RELEASE_RESERVED ) );\r
};\r
};\r
\r
// 2. GPU解放予約\r
- // TODO もしかしたらこのタイミングで更新できるかも。\r
if( that[ '_flags' ] & X_Node_State.GPU_RELEASE_RESERVED ){\r
- console.log( 'GPU 解放 ' );\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
+ //return elm;// TODO もしかしたらこのタイミングで更新できるかも。\r
};\r
\r
// 3. GPU予約 -> GPU\r