2011-10-20 15 views
1

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

 


    <!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> 

 

おかげ

+0

IE9 strictにはフォーム要素に関する問題があります。これを見てください:http://stackoverflow.com/questions/3097219 –

答えて

0

.html方法はinnerHTML、ないouterHTMLに影響を与えます。 jQueryのreplaceWithは、outerHTMLを適切に処理するように設計されています。

ASP.NETの人々は注意してください:ViewStateが解除されますので、それはあなたのDOMから要素を削除します。回避策は$(fooElement).hide().after(##new HTML here##)です。

関連する問題