'clone ()' не работает в Internet Explorer 6
Я пытался клонировать элемент и добавить его к другому дочернему элементу со следующим утверждением jQuery:
$(userListJId).clone().appendTo(tempOwnJString);
Где userListJId
и tempOwnJString
- идентификаторы элементов.
Приведенная выше строка кода прекрасно работает в Internet Explorer 7 и более поздних версиях, но, похоже, не работает в Internet Explorer 6.
Какова может быть возможная причина?
3 ответа:
Я использовал clone() на IE6, и поэтому это не должно быть проблемой.
Возможно, вы создаете недопустимый HTML и IE6, который менее разрешителен, чем IE7, жалуется на это.
Можете ли вы показать нам свой код, а также версию jQuery?
Забавно, что вы должны спросить об этом, потому что у меня была довольно похожая проблема (хотя она затронула IE7 и, вероятно, IE6).
Кроме того, не уверен, что вы сделали что-то особенное (например, определили переменные), но, возможно, вам следует ссылаться на объекты как на $('#userListJId'), а не только на имя элемента. Опять же, я не вижу остальную часть кода, поэтому вы, возможно, уже определили эти переменные вне документа.* масштаб.
В принципе, в IE некоторые атрибуты не могут быть изменены после создается объект, примером которого является атрибут ID.
Работа вокруг состоит в том, чтобы не клонировать объект, по крайней мере, до конца .clone (), но чтобы взять внешний HTML объекта, который вы хотите клонировать в виде строки и сделать регулярное выражение .замените () на атрибут id, а затем добавьте измененный HTML в tempOwnJString.Еще одна готча в IE, это иногда (обычно?) когда он анализирует HTML, он не заключает кавычки вокруг значений атрибутов, если они содержат только буквенно-цифровые символы, поэтому помните об этом в вашем шаблоне регулярных выражений.
Вот пример кода, который я использовал.
if ($.browser.msie === true) { //unfortunately jQuery doesn't have an outerHTML function, so this is a hacky work around templateHTML = $("#activityTemplate").clone().wrap('<div>').parent().html(); newHTML = templateHTML.replace(/id\=\w+/ig, 'id='+jsonObj.ContactLogID); $(newHTML).prependTo($("#activityContainer")); // in case i need to refer to newly created object clone = $("#"+jsonObj.ContactLogID); }
Опять же, я не могу сказать наверняка, если это проблема, которую вы имеете, но с информацией, которую вы дали, и без какой-либо отладочной информации (которую IE6 действительно не предоставляет в любом случае), это лучшее предположение.
Повторяя то, что сказал @Foxtrot, вам нужно убедиться, что вы установили идентификатор на клонированном элементе, или вы испугаете IE6. В конце концов, все браузеры следуют стандарту, что идентификаторы должны быть уникальными. Их поведение, когда вы нарушаете это, меняется. Вы испытываете вариации.
В качестве тривиального примера:
var clone = $(userListIJD).clone(); clone[0].id = 'somethingElse'; // use a formula here, as presumably this is run over and over // proceed with appending the clone