Добавить html к элементу jQuery без запуска скриптов внутри html

Я написал код, который берет строку html и очищает ее от уродливого HTML с помощью jQuery (см. Ранний прототип в this SO вопрос ). Он работает довольно хорошо, но я наткнулся на проблему:

При использовании. append (), чтобы обернуть html в div, все элементы сценария в коде оцениваются и запускаются (см. этот ответ SO для объяснения, почему это происходит). Я не хочу этого, я просто хочу, чтобы они были удалены, но я могу справиться с этим позже, пока они не будут запущены.

Я использую этот код:

var wrapper = $('
').append($(html));

Я пытался сделать это таким образом вместо этого:

var wrapper = $('
' + html + '
');

Но это просто вызывает ошибку «Доступ запрещен» в IE, которую исправляет функция append () (см. ответ, на который я ссылался выше).

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

Мои вопросы:

  • Как мне обернуть кусок неизвестный HTML все элементы сценария в коде оцениваются и запускаются (см. этот ответ SO для объяснения, почему это происходит). Я не хочу этого, я просто хочу, чтобы они были удалены, но я могу справиться с этим позже, пока они не будут запущены.

    Я использую этот код:

    var wrapper = $('
    ').append($(html));

    Я пытался сделать это таким образом вместо этого:

    var wrapper = $('
    ' + html + '
    ');

    Но это просто вызывает ошибку «Доступ запрещен» в IE, которую исправляет функция append () (см. ответ, на который я ссылался выше).

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

    Мои вопросы:

    • Как мне обернуть кусок неизвестный HTML все элементы сценария в коде оцениваются и запускаются (см. этот ответ SO для объяснения, почему это происходит). Я не хочу этого, я просто хочу, чтобы они были удалены, но я могу справиться с этим позже, пока они не будут запущены.

      Я использую этот код:

      var wrapper = $('
      ').append($(html));

      Я пытался сделать это таким образом вместо этого:

      var wrapper = $('
      ' + html + '
      ');

      Но это просто вызывает ошибку «Доступ запрещен» в IE, которую исправляет функция append () (см. ответ, на который я ссылался выше).

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

      Мои вопросы:

      • Как мне обернуть кусок неизвестный HTML без запуска скриптов внутри него, желательно удалить их совсем?

      • Следует ли мне выбросить jQuery в окно и сделайте это с помощью простого JavaScript и Вместо этого манипуляции с DOM? Может ли это помочь?

      Чего я не пытаюсь делать:

      Я не пытаюсь установить какой-то уровень безопасности на стороне клиента. Я прекрасно понимаю, что это было бы бессмысленно.

      Обновление: предложение Джеймса

      Джеймс предложил мне отфильтровать элементы сценария, но посмотрите на эти два примера (первый оригинал и предложение Джеймса):

      jQuery("

      ").append("
      hellothere")

      сохраняет текстовые узлы, но записывает gnu!

      jQuery("

      ").append(jQuery("
      hellothere").not('script'))`

      Не записывает gnu !, но также теряет текстовые узлы.

      Обновление 2:

      Джеймс обновил свой ответ, и я его принял. См. Мой последний комментарий к его ответу.

13
задан Community 23 May 2017 в 10:29
поделиться