Я использую 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.