1

私たちのアプリケーションでは、$('div').append(obj.clone()).html() アプローチを使用して、オブジェクトの外側の html を取得しています。基本的に、オブジェクトのクローンを作成し、オブジェクトの html を取得してから、html で正規表現の置換を行います (主に ID とその他の属性を置換するため)。これらのオブジェクトは INPUT タイプであり、それらの値はユーザーによって変更されている可能性があります。IE9 標準モードで試すまでは、すべて正常に機能していました。何らかの理由で、このモードでオブジェクトの外側の HTML を取得しても、HTML で更新された値が取得されないようです。これを実証するために、ここに小さなプログラムを示します。最初に IE8 標準で実行してみると、値が更新されることがわかります。次に print html を呼び出すと、更新された値が表示されます。しかし... IE9モード(標準)に切り替えると、HTMLを出力すると元の値が表示されますが、値が変更された後でも。doStuff と doStuff2 の 2 つの関数があり、どちらも同じ結果になります。clone() に問題があるかどうかを確認するために両方を実行しましたが、そうではないようです。POCコードは次のとおりです。



    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
      <script src="jquery-1.6.4.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <script type="text/javascript">

    $(document).ready(doStuff2 );

    function doStuff()
    {
     alert($('#testinput').val());
     alert( ($('').append($('#testinput').clone())).html());

     $('#testinput').val('newValue');

     alert($('#testinput').val());
     alert( ($('').append($('#testinput').clone())).html());
    }
    function doStuff2()
    {
     alert($('#testinput').val());
     alert( ($('#one').append($('#testinput'))).html());

     $('#testinput').val('newValue');

     alert($('#testinput').val());
     alert( ($('#two').append($('#testinput'))).html());
    }
    </script>
    </head>
    <body>
       <input type="text" id='testinput' value="test">
       <div id='one'/>
       <div id='two'/>
    </body>
    </html>


ありがとう

4

1 に答える 1

0

メソッドはではなく.htmlに影響します。jQueryは適切に処理するように設計されています。innerHTMLouterHTMLreplaceWithouterHTML

ASP.NET 関係者は注意してください。DOMから要素が削除されるため、ViewState破損します。回避策が取られています$(fooElement).hide().after(##new HTML here##)

于 2012-03-26T21:05:37.737 に答える