`clone ()` не работает в Internet Explorer 6 - PullRequest
2 голосов
/ 10 ноября 2011

Я пытался клонировать элемент и добавить его к другому дочернему элементу с помощью следующего выражения jQuery:

$(userListJId).clone().appendTo(tempOwnJString);

Где userListJId и tempOwnJString - это идентификаторы элементов.

Приведенная выше строка кода отлично работает в Internet Explorer 7 и более поздних версиях, но, похоже, не работает в Internet Explorer 6.

В чем может быть причина?

Ответы [ 3 ]

0 голосов
/ 10 ноября 2011

Забавно, что вы должны спросить об этом, потому что у меня была довольно похожая проблема (хотя она затрагивала IE7 и, вероятно, IE6).

Кроме того, не уверен, что вы сделали что-то особенное (например, определение переменных), но, возможно, вам следует ссылаться на объекты как $ ('# userListJId'), а не только на имя элемента. Опять же, я не вижу остальной части кода, поэтому вы, возможно, уже определили эти переменные вне документа. * Scope.

Как правило, в IE некоторые атрибуты не могут быть изменены после создания объекта, например, атрибут ID.

Обходной путь - не клонировать объект, по крайней мере, с помощью .clone (), но взять внешний HTML-код объекта, который вы хотите клонировать, в виде строки и выполнить регулярное выражение .replace () для атрибута 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 на самом деле не предоставляет), это лучшее предположение.

0 голосов
/ 10 ноября 2011

Повторяя сказанное @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
0 голосов
/ 10 ноября 2011

Я использовал clone () в IE6, и поэтому это не должно быть проблемой.
Возможно, вы недействительны в HTML и IE6, который менее разрешителен, чем IE7, жалуется на это.
Можете ли вы показать нам свой код итакже версия jQuery?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...