Chr*_*eta 3 html javascript tags google-apps-script
调用时如何删除所有格式标签:
GmailApp.getInboxThreads()[0].getMessages()[0].getBody()
Run Code Online (Sandbox Code Playgroud)
这样,文本的唯一剩余部分就是可以读取的内容.
格式化可以被破坏; 正文中的文本只需要解析,但标签如下:
"&"
<br>
Run Code Online (Sandbox Code Playgroud)
可能需要删除.
Cor*_*y G 12
即使Apps Script中没有DOM,您也可以解析HTML并以这种方式获取纯文本:
function getTextFromHtml(html) {
return getTextFromNode(Xml.parse(html, true).getElement());
}
function getTextFromNode(x) {
switch(x.toString()) {
case 'XmlText': return x.toXmlString();
case 'XmlElement': return x.getNodes().map(getTextFromNode).join('');
default: return '';
}
}
Run Code Online (Sandbox Code Playgroud)
调用
getTextFromHtml("hello <div>foo</div>& world <br /><div>bar</div>!");
Run Code Online (Sandbox Code Playgroud)
将返回
"你好foo&world bar!".
为了解释,将第二个参数作为"true"的Xml.parse将文档解析为HTML页面.然后我们遍历文档(将使用缺少的HTML和BODY元素等修补并转换为有效的XHTML页面),将文本节点转换为文本并展开所有其他节点.
这无疑是记录不清的; 我通过玩Xml对象并记录中间结果来写这个,直到我开始工作.我们需要更好地记录Xml的东西.
我注意到您正在撰写Google Apps脚本.Google Apps脚本中没有DOM,您也无法创建元素并获取innerText属性.
getBody()为您提供HTML中的电子邮件正文.您可以使用以下代码替换标签:
var html = GmailApp.getInboxThreads()[0].getMessages()[0].getBody();
html=html.replace(/<\/div>/ig, '\n');
html=html.replace(/<\/li>/ig, '\n');
html=html.replace(/<li>/ig, ' *');
html=html.replace(/<\/ul>/ig, '\n');
html=html.replace(/<\/p>/ig, '\n');
html=html.replace(/<br\/?>/ig, '\n');
html=html.replace(/<[^>]+>/ig, '');
Run Code Online (Sandbox Code Playgroud)
也许你可以找到更多标签来替换.请记住,此代码不适用于任何HTML,但适用于getBody()HTML.GMail有自己的格式化方法,并没有在HTML中使用每个可能的现有标签,只使用它的一部分; 那么我们的GMail特定代码更短.
我不确定你的意思.getBody()- 这是否应该返回 DOM 主体元素?
然而,删除 HTML 标签的最简单的解决方案可能是让浏览器渲染 HTML 并向他询问文本内容:
var myHTMLContent = "hello & world <br />!";
var tempDiv = document.createElement('div');
tempDiv.innerHTML = myHTMLContent;
// retrieve the cleaned content:
var textContent = tempDiv.innerText;
Run Code Online (Sandbox Code Playgroud)
对于上面的示例,textContent变量将包含文本
"hello & world
!"
Run Code Online (Sandbox Code Playgroud)
(请注意由于标签而导致的换行<br />。)
| 归档时间: |
|
| 查看次数: |
6514 次 |
| 最近记录: |