JQuery "внешний HTML" не показывает измененные значения в стандартном представлении IE9 - PullRequest
1 голос
/ 20 октября 2011

В нашем приложении мы получаем внешний html объекта, используя подход $ ('div'). Append (obj.clone ()). Html (). Мы в основном клонируем объект, получаем html объекта и затем выполняем некоторую замену регулярного выражения в html (главным образом для замены идентификатора и некоторых других атрибутов). Эти объекты имеют тип INPUT, и их значение может быть изменено пользователем. Все работало нормально, пока мы не попробовали его в режиме стандартов IE9. По какой-то причине в этом режиме захват внешнего HTML-объекта, похоже, не получает обновленное значение в HTML. Чтобы продемонстрировать это, вот небольшая программа - попробуйте сначала запустить ее в стандартах IE8, и вы увидите, что она обновляет значение, а затем при следующем вызове print html отобразится обновленное значение. НО ... если вы переходите в режим IE9 (стандарты), тогда он выводит исходное значение при распечатке HTML, даже после того, как значение было изменено. Есть две функции - doStuff и doStuff2 - они обе имеют одинаковые результаты. Я просто сделал и то, и другое, чтобы понять, может ли это быть проблемой с 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"/&gt
      <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>


Спасибо

1 Ответ

0 голосов
/ 27 марта 2012

Метод .html влияет на innerHTML, а не outerHTML.replaceWith от jQuery разработан для правильной обработки outerHTML.

Ребята из ASP.NET, остерегайтесь: он удалит элемент из DOM, так что ViewStateперерыв.Обходной путь должен был принять $(fooElement).hide().after(##new HTML here##).

...