JavaScript не выполняется при вставке в DOM с помощью jQuery - PullRequest
2 голосов
/ 22 марта 2012

РЕДАКТИРОВАТЬ: фильтр () был явно неправильно.Изменил его, чтобы найти (), однако проблема остается.

Этот код работает для меня:

$('#content')
   .replaceWith($(
      '<div>
       <div id="content"> Hello <script type="text/javascript"> alert(123); </script>
       </div>
       </div>
      '));

Но это не так:

$('#content')
   .replaceWith($(
      '<div>
       <div id="content"> Hello <script type="text/javascript"> alert(123); </script>
       </div>
       </div>
      ').find('#content'));

Единственная разницачто во втором примере я хочу отфильтровать только одну часть HTML, а затем вставить ее в DOM.

Есть идеи?Спасибо.

РЕДАКТИРОВАТЬ3: Добавлено решение как ответ

1 Ответ

0 голосов
/ 23 марта 2012

Это работает для меня:

var newElements = $('<div><div id="content"><script>alert(123)</script></div></div>');
if (newElements.length > 1) {
  for (var i = 1; i < newElements.length; i++) {
    $('body').append(newElements[i]);
  }
}
$('#content').html(newElements.find('#content').html());

Причина в том, что при создании элементов при первом вызове сортируются все теги сценария и помещаются их в массив.

console.log($('<div><div id="content"><script>alert(123)</script></div></div>'));

Результат:

[div, script]

Тогда, очевидно, при применении .find () к этому массиву теги скрипта теряются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...