从同步的Gmail邮件线程中检测引用内容的最佳方法是什么?

时间:2019-01-20 06:29:02

标签: javascript html html5

我们同步基本上是HTML邮件正文的Gmail线程。因此,如果有主题“回复电子邮件”,我会得到这些引用的内容

enter image description here

我需要检测被引用元素的div元素并将其删除。我的问题是如何检测引用的元素?

我找到了从中找到引用元素的方法。

https://github.com/nylas/nylas-mail/blob/master/packages/client-app/src/services/quoted-html-transformer.es6#L289

在这里,他们采用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);
}

0 个答案:

没有答案