0

他の誰かがこの問題に遭遇し、満足のいく解決策に到達しましたか?

基本的に、私は非常に複雑な Web アプリケーションを持っており、IE9 Quirks モード (現時点では Doctype を切り替える可能性はありません) では、jQuery を介して動的に挿入される特定のタイプの要素が完全に表示されません。ページ レイアウトには関与しますが、要素自体は表示されません

5 秒後、30 秒後、さらにはそれよりも遅く、要素が魔法のように表示されます。

私はF12開発ツールを使用しました(「デバッグ開始」をクリックした場合とクリックしない場合の両方)、問題の要素が表示され、青い境界線インジケーターが表示されません(明らかにレンダリングされていないため、境界線のレンダリングは表示されません、これは論理的です)。

一時的に機能する回避策は、要素を動的に削除し、ネストされたsetTimeout()チェーンに再挿入することでした。次に、クリック イベント ハンドラを再インストールする必要があります。

このような:

if (isQuirksMode()) {                                         
    setTimeout(function() {                                   
        var parent = jqelement.parent();                        
        var removed = jqelement.remove();                       
        setTimeout(function() {                               
            parent.append(removed);                           
            removed.children('input').click(clickcallback);
        },0);                                                 
    },0);                                                     
}                                                             
jqpage.append(jqelement);

このコードは、要素の挿入、DOM からの削除、および再度の挿入を強制し、その後は正しく表示されるように見えます。

このようにする理由は、再レンダリングをトリガーすることを期待して、クラスの追加と削除を試みましたが、動作は変わりませんでした。

私の質問は、この動作は誰にとってもベルを鳴らすものですか?それを動作させるためのより安価な方法を思いつくことができましたか?

4

1 に答える 1

0

要素を文字列として一度に注入する方が、要素を個別に DOM に注入するよりもはるかに高速です。

文字列で構築します -innerHTML挿入に使用します。

于 2013-09-27T20:00:19.067 に答える