jQuery - теги script в HTML анализируются jQuery и не выполняются

У меня есть страница HTML как так:

<html>
<body>
<div id='something'>
    ...
    <script>
    var x = 'hello world';
    </script>
    ...
</div>
</body>
</html>

На другой странице я делаю это:

$.ajax({
    url: 'example.html',
    type: 'GET',
    success: function(data) {
        $('#mydiv').html($(data).find('#something').html());
        alert(x);
    }
});

jQuery, однако, не выполняет JavaScript в первом файле, даже при том, что в документации говорится, что она делает. Как я могу заставить его сделать это?

Править: К сожалению, в приложении реального мира я продолжаю работать, я не управляю тем, что имеет "включенная" страница. Мы находимся на том же домене, но я не могу изменить код, который он производит, поскольку это - упакованный продукт, который наш отдел ИТ не позволит нам изменить.

33
задан dreamweiver 21 February 2014 в 13:27
поделиться

3 ответа

Как указал Пойнти ( простите за каламбур ), jQuery портит теги SCRIPT, когда вы передаете HTML в $ () . Однако он не удаляет их - он просто добавляет их в коллекцию DOM, созданную из вашего HTML. Вы можете выполнить сценарии следующим образом:

$.ajax({
    url: 'example.html',
    type: 'GET',
    success: function(data) {

        var dom = $(data); 
        $('#mydiv').html(dom.find('#something').html());
        dom.filter('script').each(function(){
            $.globalEval(this.text || this.textContent || this.innerHTML || '');
        });
    }
});
45
ответ дан 27 November 2019 в 17:51
поделиться

Я не совсем уверен в этом, но возможно, что происходит следующее: когда jQuery создает фрагмент из $ (data) , теги скрипта в этот момент теряются.

Если вы можете сделать так, чтобы включенная страница действительно была просто фрагментом:

<div id='something'>
  <!-- ... -->
  <script>var x = 'hello world';</script>
</div>

без каких-либо других окружающих вещей, тогда ваш обратный вызов успеха может сделать это:

success: function(data) {
  $('#mydiv').html(data);
}

Теперь эти теги сценария будут замечены jQuery html () , которая явно ищет и удаляет их. Однако он сохраняет эти блоки сценария и выполняет их после завершения обновления целевого содержимого.

3
ответ дан 27 November 2019 в 17:51
поделиться

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

Если вы хотите вернуть x , вам придется выведите его в ответ AJAX.

0
ответ дан 27 November 2019 в 17:51
поделиться
Другие вопросы по тегам:

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