從文本JavaScript中刪除HTML

有沒有一種簡單的方法能夠在JavaScript中獲取html字符串並去除html? html


#1樓

這是一個解決@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


#2樓

使用jQuery,您能夠簡單地經過使用來檢索它函數

$('#elementID').text()

#3樓

爲純文本電子郵件轉換HTML,使超連接(a href)保持完整

由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郵件客戶端都會將其轉換,所以用戶能夠單擊它們。

但願您以爲這個有幫助。


#4樓

我本身建立了一個工做正則表達式:

str=str.replace(/(<\?[a-z]*(\s[^>]*)?\?(>|$)|<!\[[a-z]*\[|\]\]>|<!DOCTYPE[^>]*?(>|$)|<!--[\s\S]*?(-->|$)|<[a-z?!\/]([a-z0-9_:.])*(\s[^>]*)?(>|$))/gi, '');

#5樓

做爲jQuery方法的擴展,若是您的字符串可能不包含HTML(例如,若是您嘗試從表單字段中刪除HTML)

jQuery(html).text();

若是沒有html,將返回一個空字符串

採用:

jQuery('<p>' + html + '</p>').text();

代替。

更新:正如已經指出了意見,在某些狀況下,該解決方案將執行JavaScript的包含在html若是值html能夠被攻擊的影響,使用不一樣的解決方案。

相關文章
相關標籤/搜索