有没有一种简单的方法可以在 JavaScript 中获取一串 html 并去掉 html?
从文本 JavaScript 中剥离 HTML
IT技术
javascript
html
string
2021-01-12 20:43:02
6个回答
如果您在浏览器中运行,那么最简单的方法就是让浏览器为您完成...
function stripHtml(html)
{
let tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText || "";
}
注意:正如人们在评论中指出的那样,如果您不控制 HTML 的来源(例如,不要在可能来自用户输入的任何内容上运行它),最好避免这种情况。对于这些场景,您仍然可以让浏览器为您完成工作 -请参阅 Saba 关于使用现已广泛使用的 DOMParser 的回答。
myString.replace(/<[^>]*>?/gm, '');
最简单的方法:
jQuery(html).text();
它从一串 html 中检索所有文本。
我想分享Shog9批准的答案的编辑版本。
正如Mike Samuel在评论中指出的那样,该函数可以执行内联 javascript 代码。
但是Shog9说“让浏览器为你做这件事......”是对的。
所以..这里是我编辑过的版本,使用DOMParser:
function strip(html){
let doc = new DOMParser().parseFromString(html, 'text/html');
return doc.body.textContent || "";
}
这里是测试内联javascript的代码:
strip("<img onerror='alert(\"could run arbitrary JS here\")' src=bogus>")
此外,它不会在解析时请求资源(如图像)
strip("Just text <img src='https://assets.rbl.ms/4155638/980x.jpg'>")
作为 jQuery 方法的扩展,如果您的字符串可能不包含 HTML(例如,如果您试图从表单字段中删除 HTML)
jQuery(html).text();
如果没有 HTML 将返回一个空字符串
用:
jQuery('<p>' + html + '</p>').text();
反而。
更新:
正如评论中指出的那样,在某些情况下,html
如果 的值html
可能受到攻击者的影响,则此解决方案将执行其中包含的 javascript ,请使用不同的解决方案。