Anhängen von html-jQuery-element, ohne ausführen von scripts im html-Code

Ich geschrieben habe einige code, der einen string von html und reinigt entfernt alle hässlich HTML von es mit jQuery (siehe ein früher Prototyp in diese Frage ALSO). Es funktioniert ziemlich gut, aber ich bin auf ein Problem:

Bei der Verwendung .append() umschließen den html-Code in ein div, der alle script-Elemente in den code ausgewertet und ausgeführt (siehe diese SO beantworten für eine Erklärung, warum dies geschieht). Ich will das nicht, ich habe wirklich nur wollen, dass Sie entfernt werden, aber ich kann damit umgehen, dass später selbst, solange Sie nicht ausgeführt werden.

Ich bin mit diesem code:

var wrapper = $('<div/>').append($(html));

Habe ich versucht, es zu tun auf diese Weise statt:

var wrapper = $('<div>' + html + '</div>');

Aber das bringt den Fehler "Zugriff verweigert" im IE, dass die append () - Funktion behebt (siehe die Antwort, die ich oben verwiesen).

Ich glaube, ich könnte in der Lage sein, um zu umschreiben, dass mein code nicht verlangen, ein wrapper um das html, aber ich bin mir nicht sicher, und ich würde gerne wissen, ob es möglich ist, Anhängen, html, ohne das ausführen von Skripten in der es sowieso nicht.

Meine Fragen:

  • Wie kann ich wickeln Sie ein Stück unbekannte html
    ohne das ausführen von Skripten drin,
    vorzugsweise entfernen Sie Sie ganz?

  • Sollte ich werfe jQuery aus dem Fenster
    und dies mit plain JavaScript und
    DOM-manipulation statt? Würde das helfen?

Was ich versuche nicht zu tun:

Ich versuche nicht, die haben so eine Art security layer auf der client-Seite. Ich bin sehr wohl bewusst, dass es sinnlos wäre.

Update: James' Vorschlag

James schlug vor, ich sollte herausfiltern die script-Elemente, aber schauen Sie, diese beiden Beispiele (die ursprüngliche erste und der James' Vorschlag):

jQuery("<p/>").append("<br/>hello<script type='text/javascript'>console.log('gnu!'); </script>there")

hält den text-Knoten, sondern schreibt gnu!

jQuery("<p/>").append(jQuery("<br/>hello<script type='text/javascript'>console.log('gnu!'); </script>there").not('script'))`

Nicht gnu schreiben!, verliert aber auch der text-Knoten.

Update 2:

James hat aktualisiert seine Antwort, und ich habe es akzeptiert. Siehe meinen letzten Kommentar zu seiner Antwort, aber.

InformationsquelleAutor Peter Jaric | 2011-04-05
Schreibe einen Kommentar