2011-12-14 16 views

risposta

12

Questo dovrebbe funzionare per voi:

var stringOfHtml = // your string here 
$(stringOfHtml).find('script').remove(); 

Per ottenere la nuova stringa con i tag di script rimosso:

var stringOfHtml = "<div><script></script><span></span></div>"; 
var html = $(stringOfHtml); 
html.find('script').remove(); 

var stringWithoutScripts = html.wrap("<div>").parent().html(); // have to wrap for html to get the outer element 

JS Fiddle Example - dovuto usare p invece di script come lo script ha rotto il violino , lo stesso principio però.

risposta di lavoro effettivo qui (si spera)

Ecco una soluzione per il problema di script, utilizzare sostituzione di scambiare il testo dello script con qualcos'altro (cercare di renderlo unico) quindi rimuovere quei nuovi tag e l'uso sostituisci di nuovo per scambiare di nuovo nel caso in cui lo script venga utilizzato in qualsiasi altro punto del testo. Sì, si fa uso di espressioni regolari, ma non rimuovere i tag di script quindi spero che va bene;):

var stringOfHtml = "<p></p><script>alert('fail');</scr" + "ipt><span></span>"; 
var wrappedString = '<div>' + stringOfHtml + '</div>'; 
var noScript = wrappedString.replace(/script/g, "THISISNOTASCRIPTREALLY"); 
var html = $(noScript); 
html.find('THISISNOTASCRIPTREALLY').remove(); 

alert(html.html().replace(/THISISNOTASCRIPTREALLY/g, 'script')); 

JS Fiddle Workaround

JS Fiddle Example With Script Text

+0

Come si ottiene la stringa risultante? – nnnnnn

+0

Immagino che il problema dell'OS sia che lo script venga eseguito analizzandolo, e '.remove()' non è utile. [Vedi questo esempio] (http://jsfiddle.net/tWenG/1/). –

+0

@DavidRodrigues Sembra che tu abbia ragione. Indovina che questo non può funzionare sugli script ma dovrebbe funzionare su qualsiasi altro tag. –

2

Credo che questo dovrebbe funzionare

$('script').each(function() { 
    $(this).remove(); 
}); 
+0

equivale a '$ ('script'). Remove()' –

5

Vecchia domanda, ma se si sta ancora cercando il modo più semplice per rimuovere gli script da una stringa, provare

$.parseHTML(string); 

$ .parseHTML() rimuove automaticamente i tag di script dalle stringhe.

Edit:

Questo funziona perché keepScripts ha valore falso come predefinito. (Riferimento: $.parseHtml)

$.parseHTML(data, context, keepScripts) 
+0

Funziona alla grande, ma come faccio a riunire l'html in una stringa? 'parseHTML()' restituisce un array di elementi DOM che escludono i tag dello script, ma mi piacerebbe unirmi senza doverli reinserire nel documento. Sto cercando di evitare di usare qualcosa come $(). Add() o append() – ojosilva

Problemi correlati