jQuery 1.6.4 проблемы клонирования в Internet Explorer 7 - PullRequest
5 голосов
/ 24 сентября 2011

Я использую jQuery v1.6.4. Вот тестовый пример для моей проблемы:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
         <script type="text/javascript" src="jquery.js"></script>
    </head>
    <body>

        <div id="container"></div>
        <div id="clone-tpl">I am a clone template</div>

        <script type="text/javascript">
              $(function(){
                var clone = $('#clone-tpl').clone();
                clone.attr('id','other'+Math.random());
                clone.text('I am a clone');
                $('#container').append(clone);
                alert($('#container').html());  
                alert($('#clone-tpl').attr('id'));

                var clone2 = $('#clone-tpl').clone();
                clone2.attr('id','other'+Math.random());
                clone2.text('I am a clone 2');
                $('#container').append(clone2);
                alert($('#container').html());  
                alert($('#clone-tpl').attr('id')); 
            });
         </script>  
        </body>
    </html>

В Mozilla Firefox и Internet Explorer 9 он работает должным образом: два раза клонирует clone-tpl, изменяет идентификатор и добавляет клоны в контейнер div. Контейнер div остается без изменений. Журнал вывода оповещений выглядит следующим образом:

<div id="other0.7574357943876624">I am a clone</div>
clone-tpl
<div id="other0.7574357943876624">I am a clone</div><div id="other0.1724491511655708">I am a clone 2</div>
clone-tpl

Но в Internet Explorer 7 все портится с clone2, посмотрите, что говорит оповещение:

<DIV id=other0.1851332940530379>I am a clone</DIV>
clone-tpl
<DIV id=other0.1851332940530379>I am a clone</DIV><DIV id=clone-tpl>I am a clone 2</DIV>
other0.6041996510541515

Понятия не имею, как alert($('#clone-tpl').attr('id')) может внезапно дать что-то еще, кроме clone-tpl? В конце концов, если я выберу элемент по атрибуту id clone-tpl, атрибут id ДОЛЖЕН быть clone-tpl, но это не так!

Что не так? Почему IE7 меняет идентификатор источника клонирования, если я создаю второй клон?

Кстати, если я вернусь к jQuery v1.4.2, IE7 начнет клонировать нормально.

Это ошибка в jQuery v1.6.4? Есть ли обходной путь для этого?

P.S. Я действительно хотел бы не возвращаться к 1.4.2, потому что 1.6 имеет некоторые полезные функции, которые помогают мне преодолеть некоторые другие ошибки jQuery: http://bugs.jquery.com/ticket/5684?version=10.

1 Ответ

2 голосов
/ 08 февраля 2013

У меня тоже были проблемы с клонами в IE

Наконец мне пришлось написать свой собственный простой клон для IE, когда надоели ошибки.Это не универсально и не блестяще, но в этом случае это не может быть сделано много, IE отстой.

Это может быть изменено в соответствии со своими потребностями.

...