Хорошая новость:
Он работает на 100%.
blockquote>Просто добавьте что-то внутри тега скрипта, например
alert('voila!');
. Правильный вопрос, который вы, возможно, захотите спросить, возможно, «Почему я не увидел его в DOM?» .Карл Сведберг сделал приятное объяснение комментарию посетителя в сайт API jQuery . Я не хочу повторять все его слова, вы можете прочитать здесь прямо здесь (мне было трудно перемещаться по комментариям там) .
Все методы вставки jQuery используют внутреннюю функцию domManip для очистки / обработки элементов до и после их вставки в DOM. Одна из функций, которую выполняет функция domManip, - это вытащить любые элементы скрипта, которые должны быть вставлены, и запускать их через «процедуру evalScript», а не вводить их остальной части фрагмента DOM. Он вставляет скрипты отдельно, оценивает их, а затем удаляет из DOM.
Я считаю, что одна из причин jQuery заключается в том, чтобы избежать ошибок «Разрешения на отказ», которые может возникать в Internet Explorer при вставке скриптов при определенных обстоятельствах. Он также избегает многократной вставки / оценки того же скрипта (который может потенциально вызвать проблемы), если он находится внутри содержащего элемента, который вы вставляете, а затем перемещаете DOM.
blockquote>Следующее, я расскажу, что это плохие новости, используя функцию
.append()
, чтобы добавить скрипт.И The Bad News is ..
Вы не можете отлаживать свой код.
blockquote>Я не шучу, даже если вы добавили ключевое слово
debugger;
между строкой, которую вы хотите установить в качестве точки останова , вы получите только стек вызовов объекта, не увидев точку останова на исходном коде, (не говоря уже о том, что это ключевое слово работает только в браузере webkit, все остальные основные браузеры, похоже, пропустили это ключевое слово) .Если вы полностью понимаете, что делает ваш код, это будет незначительным недостатком. Но если вы этого не сделаете, вы добавите ключевое слово
debugger;
по всему месту, чтобы узнать, что не так с вашим (или моим) кодом. Во всяком случае, есть альтернатива, не забывайте, что javascript может изначально манипулировать HTML DOM.Обходной путь.
Используйте javascript (не jQuery) для управления HTML DOM
blockquote>Если вы не хотите потерять возможности отладки, вы можете использовать javascript для собственных HTML DOM-манипуляций. Рассмотрим этот пример:
var script = document.createElement("script"); script.type = "text/javascript"; script.src = "path/to/your/javascript.js"; // use this for linked script script.text = "alert('voila!');" // use this for inline script document.body.appendChild(script);
Там, как и в старые времена, это не так. И не забудьте очистить вещи, будь то в DOM или в памяти для всего объекта, на который ссылается и больше не требуется, чтобы предотвратить утечку памяти. Вы можете рассмотреть этот код для очистки вещей:
document.body.removechild(document.body.lastChild); delete UnusedReferencedObjects; // replace UnusedReferencedObject with any object you created in the script you load.
Недостатком этого обходного пути является то, что вы можете случайно добавить дублирующий скрипт, и это плохо. Отсюда вы можете слегка подражать функции
.append()
, добавив проверку объекта перед добавлением и удалив скрипт из DOM сразу после его добавления. Рассмотрим этот пример:function AddScript(url, object){ if (object != null){ // add script var script = document.createElement("script"); script.type = "text/javascript"; script.src = "path/to/your/javascript.js"; document.body.appendChild(script); // remove from the dom document.body.removeChild(document.body.lastChild); return true; } else { return false; }; }; function DeleteObject(UnusedReferencedObjects) { delete UnusedReferencedObjects; }
Таким образом, вы можете добавить скрипт с возможностью отладки, избегая при этом двукратности сценария. Это всего лишь прототип, вы можете расширить его, как хотите. Я использовал этот подход и вполне доволен этим. Конечно, я никогда не буду использовать jquery
.append()
, чтобы добавить скрипт.Happy Coding, Hendra Uzia.