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

Я использую гаджет Fish (http://abowman.com/google-modules/fish/) в CMS на основе вики, и мне нужно переместить гаджет с одного элемента HTML на другой. (Примечание: гаджет с рыбой является примером - проблема возникает и с другими гаджетами.)

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

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

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
0
3 887
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Мы работаем над исправлением этой проблемы с повторным выполнением в ядре jQuery, но пока что здесь происходит именно это.

Мастер! может ты ответишь этот теоретический вопрос о своей замечательной библиотеке jQuery?

gdoron is supporting Monica 25.05.2012 15:46

Как отмечает Джон Ресиг, это является проблема 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);
   });
});

Я вижу, что он копирует DOM, а не перемещает его

vsync 28.04.2010 16:47

@vsync: почему ты так говоришь?

Shog9 28.04.2010 19:22

Я вижу, как он копирует элементы (каждый цикл), но что происходит после? Я ожидаю, что убью исходный элемент, не так ли?

vsync 29.04.2010 18:38

@vsync: здесь не происходит копирования элементов. См .: developer.mozilla.org/En/DOM/Node.appendChild

Shog9 29.04.2010 19:06

Другие вопросы по теме