我们同步基本上是HTML邮件正文的Gmail线程。因此,如果有主题“回复电子邮件”,我会得到这些引用的内容
我需要检测被引用元素的div
元素并将其删除。我的问题是如何检测引用的元素?
我找到了从中找到引用元素的方法。
在这里,他们采用id或class为gmail_quote
的元素并将其删除。但这是不可能的。
对于html元素,正则表达式不是一个好主意。
检查标记<blockquote>
是个好主意吗?如果是这样,难道不会有边缘案例吗?显式检测元素的最佳解决方案是什么?
源代码:
function getQuotedContents(html, {includeInline} = {}){
let quotedText;
quotedText = _findGmailQuotes(html);
return quotedText;
}
function _findGmailQuotes(doc) {
// Gmail creates both div.gmail_quote and blockquote.gmail_quote. The div
// version marks text but does not cause indentation, but both should be
// considered quoted text.
return Array.from(doc.getElementsByTagName('blockquote'));
}
function removeElements(elements){
var el, i, len;
if (elements == null) {
elements = [];
}
for (i = 0, len = elements.length; i < len; i++) {
el = elements[i];
try {
if (el.parentNode) {
el.parentNode.removeChild(el);
}
} catch (_error) {
continue;
}
}
return elements;
}
const getElementsWithoutQuotes = (rawHtml) => {
const doc = _parseHTML(rawHtml);
const quoteText = getQuotedContents(doc);
const docWithoutQuotedElements = removeElements(quoteText);
return _outputHTMLFor(docWithoutQuotedElements);
}