2011-12-14 6 views

Odpowiedz

12

ten powinien pracować dla Ciebie:

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

Aby uzyskać nowy łańcuch z tagami skryptu usunięte:

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 - musiałem użyć p zamiast skrypt jako skrypt złamał skrzypce , jednak ta sama zasada.

Rzeczywista odpowiedź roboczą tutaj (mam nadzieję)

Oto obejście problemu skryptu, należy wymienić, aby zamienić tekst skryptu z czegoś innego (spróbuj i uczynić go wyjątkowym), a następnie usunąć te nowe znaczniki i wykorzystanie zamień ponownie, aby zamienić z powrotem w przypadku użycia skryptu gdziekolwiek indziej w tekście. Tak, to nie użyć wyrażenia regularnego, ale nie usunąć tagi skryptów więc mam nadzieję, że to w porządku;):

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

Jak uzyskać wynikowy ciąg znaków? – nnnnnn

+0

Domyślam się, że problem SO polega na tym, że skrypt jest wykonywany podczas jego analizy, a '.remove()' jest niepotrzebne. [Zobacz ten przykład] (http://jsfiddle.net/tWenG/1/). –

+0

@DavidRodrigues Wydaje się, że masz rację. Domyślam się, że to nie działa na skryptach, ale powinno działać na każdym innym tagu. –

2

Chyba to powinno działać

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

jest to odpowiednik '$ ('script'). Remove()' –

5

Stare pytanie, ale jeśli nadal szukasz najprostszego sposobu na usunięcie skryptów z ciągu znaków, spróbuj

$.parseHTML(string); 

$ .parseHTML() automatycznie usuwa znaczniki skryptów z łańcuchów.

Edit:

To działa, ponieważ keepScripts ma wartość false jako domyślną. (Numer referencyjny: $.parseHtml)

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

Działa wspaniale, ale jak mogę dołączyć do html z powrotem do łańcucha? 'parseHTML()' zwraca tablicę elementów DOM, które wykluczają znaczniki skryptów, ale chciałbym dołączyć bez konieczności wstawiania ich z powrotem do dokumentu. Próbuję uniknąć użycia czegoś takiego jak $(). Add() lub append() – ojosilva

Powiązane problemy