有沒有一種簡單的方法能夠在JavaScript中獲取html字符串並去除html? html
這是一個解決@MikeSamuel安全問題的版本: 正則表達式
function strip(html) { try { var doc = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null); doc.documentElement.innerHTML = html; return doc.documentElement.textContent||doc.documentElement.innerText; } catch(e) { return ""; } }
請注意,若是HTML標記不是有效的XML,則它將返回一個空字符串(aka,標記必須關閉而且屬性必須用引號引發來)。 這不是理想的選擇,可是確實避免了潛在的安全利用問題。 安全
若是您沒有有效的XML標記,則能夠嘗試使用: 編輯器
var doc = document.implementation.createHTMLDocument("");
可是因爲其餘緣由,這也不是一個完美的解決方案。 ide
使用jQuery,您能夠簡單地經過使用來檢索它函數
$('#elementID').text()
由hypoxide發佈的上述函數能夠正常工做,可是我進行了一些工做,基本上能夠轉換在Web RichText編輯器(例如FCKEditor)中建立的HTML,並清除全部HTML,可是因爲我想要HTML和純文本版本,以幫助爲STMP電子郵件建立正確的部分(HTML和純文本)。 this
通過長時間的搜索,我本身和個人同事們都使用Javascript中的正則表達式引擎提出瞭如下建議: spa
str='this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p> '; str=str.replace(/<br>/gi, "\n"); str=str.replace(/<p.*>/gi, "\n"); str=str.replace(/<a.*href="(.*?)".*>(.*?)<\/a>/gi, " $2 (Link->$1) "); str=str.replace(/<(?:.|\s)*?>/g, "");
str
變量開始像這樣: code
this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p>
而後在代碼運行以後,它看起來像這樣:- orm
this string has html code i want to remove Link Number 1 -> BBC (Link->http://www.bbc.co.uk) Link Number 1 Now back to normal text and stuff
如您所見,全部HTML都已刪除,而且連接已被保留,超連接文本仍然完好無損。 另外,我還用\\n
(換行符)替換了<p>
和<br>
標記,以便保留了某種可視格式。
要更改連接格式(例如BBC (Link->http://www.bbc.co.uk)
),只需編輯$2 (Link->$1)
,其中$1
是href URL / URI,而$2
是超連接的文本。 經過直接在純文本主體中的連接,大多數SMTP郵件客戶端都會將其轉換,所以用戶能夠單擊它們。
但願您以爲這個有幫助。
我本身建立了一個工做正則表達式:
str=str.replace(/(<\?[a-z]*(\s[^>]*)?\?(>|$)|<!\[[a-z]*\[|\]\]>|<!DOCTYPE[^>]*?(>|$)|<!--[\s\S]*?(-->|$)|<[a-z?!\/]([a-z0-9_:.])*(\s[^>]*)?(>|$))/gi, '');
做爲jQuery方法的擴展,若是您的字符串可能不包含HTML(例如,若是您嘗試從表單字段中刪除HTML)
jQuery(html).text();
若是沒有html,將返回一個空字符串
採用:
jQuery('<p>' + html + '</p>').text();
代替。
更新:正如已經指出了意見,在某些狀況下,該解決方案將執行JavaScript的包含在html
若是值html
能夠被攻擊的影響,使用不一樣的解決方案。