OSDN Git Service

Version 0.6.129, fix X.Node.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 02_XNode.js
index 9c6d66d..da8f553 100644 (file)
@@ -1109,12 +1109,14 @@ var X_Node__commitUpdate =
                                if( X_Node_displayNoneFixForIE5 ){\r
                                        // filter の効いている要素を含む要素は display:none が無視される。\r
                                        // filter = '' で削除はできるが、再表示時に filter が消える。 -> filter な要素を削除してしまう。                                         \r
-                                       elm && elm.parentNode && X_Node__actualRemove( that );\r
+                                       if( elm && elm.parentNode ){\r
+                                               X_Node__actualRemove( that );\r
+                                       };\r
                                        return nextElement;\r
                                };\r
                                elm && ( elm.style.display = 'none' );\r
                                return elm || nextElement;\r
-                       };                              \r
+                       };                      \r
                        \r
                        // 5. ie5 非表示fixフラグ\r
                        accumulatedFlags |= that._flags;\r
@@ -1123,7 +1125,6 @@ var X_Node__commitUpdate =
                                if( accumulatedFlags & ( X_Node_State.DIRTY_POSITION | X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME ) === 0 ){\r
                                        return nextElement;\r
                                };\r
-                               \r
                        };\r
                        \r
                        // 6. 要素の生成\r
@@ -1208,8 +1209,9 @@ var X_Node__commitUpdate =
                        // 9. ie5 only\r
                        // 親及び自身へのクラス・id指定で display : none になるケースがありそれを検出\r
                        // 生成と破棄が繰り返されてしまう、親と自身の id, class が変わった場合だけ再生成。 accumulatedFlags & ( ID | CLASSNAME )\r
+                       // currentStyle を観ていたときはエラーで停止する、alert と挟むと正常に動いて支離滅裂\r
                        if( X_Node_displayNoneFixForIE5 && that._tag ){\r
-                               if( elm.currentStyle.display === 'none' ){\r
+                               if( elm.runtimeStyle.display === 'none' ){\r
                                        X_Node__actualRemove( that );\r
                                        that._flags |= X_Node_State.IE5_DISPLAY_NONE_FIX;\r
                                        return nextElement;                                     \r
@@ -1245,6 +1247,18 @@ var X_Node__commitUpdate =
                                return elm;\r
                        };\r
                        \r
+                       // 4. style="display:none" の場合\r
+                       if( that._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ){\r
+                               if( elm ){\r
+                                       elm.style.display = 'none';\r
+                                       if( elm.style.display !== 'none' ){ // ie4 の style は currentStyle 相当らしい、、、? div 以外への display:none が効かないので remove する。\r
+                                               X_Node__actualRemove( that );\r
+                                               return prevElement;\r
+                                       };\r
+                               };\r
+                               return elm || prevElement;\r
+                       };\r
+                       \r
                        if( !elm ){\r
                                prevElement ?\r
                                        prevElement.insertAdjacentHTML( 'AfterEnd', X_Node__actualCreate( that, false ) ) :\r
@@ -1370,6 +1384,7 @@ var X_Node__updateRawNode =
                                                case 'IFRAMEname' :\r
                                                        // http://d.hatena.ne.jp/NeoCat/20080921/1221940658\r
                                                        // こちらに名前をsetしないとtargetが動作しない\r
+                                                       // これってあとから name を変更できないバグでは? itozyun\r
                                                        // if( X_UA.IE ) elm.name = elm.contentWindow.name = v || '';\r
                                        };\r
                                        \r
@@ -1438,8 +1453,7 @@ var X_Node__updateRawNode =
                                        elm.removeAttribute( 'style' );\r
                                        delete that._cssText;\r
                                };\r
-                       };\r
-                       \r
+                       } else\r
                        if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
                                v = X_Node_CSS_objToIEFilterText( that );\r
                                if( v ){\r
@@ -1485,10 +1499,7 @@ var X_Node__updateRawNode =
  * document.createElement of ie4 is only for OPTION & IMAGE.\r
  */\r
 var X_Node__actualCreate =\r
-       X_UA_DOM.W3C ? (function( that, isChild ){\r
-\r
-       }) :\r
-       X_UA_DOM.IE4 ? (function( that, isChild ){\r
+       X_UA_DOM.IE4 && (function( that, isChild ){\r
                var uid = that._uid,\r
                        html, xnodes, n, i, l;\r
                \r
@@ -1540,14 +1551,10 @@ var X_Node__actualCreate =
                };\r
                \r
                return html.join( '' );\r
-       }) :\r
-       (function(){});\r
+       });\r
 \r
 var X_Node__afterActualCreate =\r
-       X_UA_DOM.W3C ? (function( that ){\r
-\r
-       }) :\r
-       X_UA_DOM.IE4 ? (function( that ){\r
+       X_UA_DOM.IE4 && (function( that ){\r
                var xnodes, i, v;\r
                \r
                if( !that._tag ) return that;\r
@@ -1560,8 +1567,7 @@ var X_Node__afterActualCreate =
                that._flags & X_Node_State.DIRTY_IE_FILTER && X_Node__updateRawNode( that, that._rawObject || X_Node__ie4getRawNode( that ) );\r
                that._flags &= X_Node_BitMask_RESET_DIRTY;\r
                X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
-       }) :\r
-       (function(){});\r
+       });\r
 \r
 var X_Node__actualRemove =\r
        X_UA_DOM.W3C ?\r
@@ -1571,6 +1577,7 @@ var X_Node__actualRemove =
                        var xnodes = that._xnodes,\r
                                elm    = that._rawObject,\r
                                child, i, l;\r
+\r
                        if( xnodes && ( l = xnodes.length ) ){\r
                                for( i = 0; i < l; ++i ){\r
                                        child = xnodes[ i ];\r
@@ -1586,8 +1593,14 @@ var X_Node__actualRemove =
                        // ちなみに elm.filters に触ると ie8 でなぜかカラム落ちが発生、、、\r
                        if( X_Node_displayNoneFixForIE5 ){\r
                                if( elm.filters && elm.filters.length ){\r
+                                       //elm.style.removeAttribute( 'filter' );\r
                                        isChild = false;\r
                                        delete that._rawObject;\r
+                                       // 破棄前に value を控える TODO checked, selected も!\r
+                                       if( X_Node_Attr_HAS_VALUE[ that._tag ] && ( !that._newAttrs || !X_Object_inObject( 'value', that._newAttrs ) ) ){\r
+                                               that._attrs.value = elm.value;\r
+                                       };\r
+                                       elm.innerHTML = '';\r
                                };\r
                        };\r
                        \r