Запрос элементов сценария из текста HTML с использованием jQuery

Загружаю страницу через $.ajax()и вставляю части результата в соответствующие части страницы:

$.ajax({
  url: '/whole_page.html',
  success: function (data, status, xhr) {
    $result = $(xhr.responseText);
    $('#menu').html($('#menu', $result).html());
    $('#content').html($('#content', $result).html());
  }
});

Работает как шарм, но я столкнулся с проблемой.

Теперь мои страницы содержат некоторые специфичные для страницы -JS, которые должны выполняться при извлечении и вставке результата. Насколько я могу судить, jQuery не будет возвращать scriptэлементов, если вы создадите объект jQuery из текста HTML и сделаете запрос к нему (Я сделал скрипку для демонстрации ). Таким образом, у меня нет возможности выборочно вставлять только те сценарии, которые я хочу, через jQuery.

Получается, что элементы scriptиз текста ответа мне приходится вытаскивать самому. По сути, я ищу правильный способ сделать это. Вот что я придумал на данный момент:

function pullScripts(text) {
  var frag = document.createDocumentFragment()
   , div = document.createElement('div')
   , scriptElements
    ;

  // This is roughly how jQuery finds the scripts when cleaning text
  frag.appendChild(div);
  div.innerHTML = text;

  scriptElements = div.getElementsByClassName('class-for-scripts-that-we-want');

  $('head').append(scriptElements);
}

Это работает достаточно хорошо, хотя я еще не проверял это на дрянных браузерах. Несмотря на это, неудобно воспроизводить такую ​​базовую функциональность jQuery только для того, чтобы избежать одной из ее функций (специальной scriptобработки ). Как видно из скрипки, объект jQuery на самом деле содержит scripts, но он не вернет их с чем-то вроде .html()или .get(). Я упустил какой-то очевидный способ сделать это?

Обратите внимание, :вся эта тема станет спорной, как только будет раскрыта внутренняя parseHTMLфункция jQuery

. Примечание 2 :Я также читал Попытка выбрать теги сценария из jQuery ajax получает ответ , однако принятым ответом является «вы не можете», за которым следует «использовать регулярное выражение». Оба из них неудовлетворительны

5
задан Community 23 May 2017 в 12:01
поделиться