2011-12-14 76 views

回答

12

這應該爲你工作:

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

要獲得腳本標記的新字符串中刪除:

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 - 只好用P的,而不是腳本作爲腳本打破了小提琴,但同樣的原則。

實際工作答案在這裏(希望)

這裏是腳本問題的解決方法,使用替代交換與別的腳本文本(試圖使它唯一的),然後刪除這些新的標籤和使用在文本中的任何其他地方使用腳本時,請再次替換以備用。是的,它使用正則表達式,但不刪除腳本標籤所以我希望這是正常的):

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

你如何得到結果字符串? – nnnnnn 2011-12-14 11:20:25

+0

我想SO問題是腳本在執行時解析它,`.remove()`是無用的。 [見這個例子](http://jsfiddle.net/tWenG/1/)。 – 2011-12-14 11:24:26

+0

@DavidRodrigues看起來你是對的。猜猜這不能在腳本上工作,但應該在任何其他標籤上工作。 – 2011-12-14 11:33:14

2

我想這應該工作

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

老問題,但如果您仍然在尋找從字符串中刪除腳本的最簡單方法,請嘗試

$.parseHTML(string); 

$ .parseHTML()會自動從字符串中刪除腳本標記。

編輯:

這工作,因爲keepScripts有假值作爲默認值。 (參考:$.parseHtml

$.parseHTML(data, context, keepScripts) 
相關問題