Перемещение элемента DOM, содержащего динамично созданный тег script

Я использую Гаджет Рыбы (http://abowman.com/google-modules/fish/) в основанном на Wiki CMS и потребность изменить местоположение гаджета от одного элемента HTML до другого. (Отметьте: гаджет рыбы является примером - проблема происходит с другими гаджетами также.)

Если я непосредственно меняю местоположение гаджета с помощью базового класса гаджетов "ig_reset", то все работает. Если я пытаюсь изменить местоположение использования окружающей обертки, то iframe, используемый гаджетом, кажется, вступает во владение. К сожалению, мне нужна гибкость того, чтобы менять местоположение использования окружающей обертки.

Это, кажется, имеет некоторое отношение к перемещению ТЕГА SCRIPT вокруг в DOM. Гаджет динамично создает сценарий и тег style. Если я удаляю динамично созданный тег script из DOM и затем меняю местоположение обертки к другому местоположению в DOM, все работы хорошо. Если я пытаюсь переместить тег script в другой элемент DOM затем, исходная проблема происходит. Так перемещение тега script вокруг DOM, кажется, причина - независимо от того, когда перемещение происходит (даже постзагрузка).

Я хотел бы понять то, что, оказывается, здесь заставляет кадр принимать страницу и также находить лучшее решение, чем удаление динамично созданного тега script.

Я поднял тест здесь: http://solidgone.com/jquery/google-gadget.html - демонстрация использует jQuery, но я не думаю, что это связано с jQuery...

5
задан DaveG 25 November 2008 в 18:10
поделиться

2 ответа

Каждый раз, когда Вы добавляете элемент сценария в страницу, с помощью jQuery, это попытается выполнить его. Таким образом при перемещении ig_reset (который является только таблицей - никакой сценарий), это работает без проблемы. Когда Вы пытаетесь переместить обертку - который содержит сценарий - сценарий перемещен и повторно выполнен.

Мы работаем для устранения этой проблемы повторного выполнения в ядре jQuery, но в настоящее время это - то, что продолжается здесь.

17
ответ дан 18 December 2019 в 07:11
поделиться

Как John Resig отмечает, это - проблема jQuery. Можно проверить это путем замены обработчика

$("#with-wrapper").click(function () 
{
   $('.sidebar-content-wrapper').contents().appendTo($("#sidebar"));
});

с тем, который избегает использования методов jQuery для фактического перемещения каждого элемента:

$("#with-wrapper").click(function() 
{
   var sidebar = $("#sidebar")[0];
   $('.sidebar-content-wrapper').contents().each(function()
   { 
      // raw DOM method rather than jQuery's 
      //  appendTo() -> domManip() -> execute script blocks behavior
      sidebar.appendChild(this);
   });
});
5
ответ дан 18 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: