私たちのアプリケーションでは、$('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>
ありがとう