Мы синхронизируем поток Gmail, который по сути является телом HTML-сообщения. Так что если есть ветка В ответных письмах я получаю цитируемое содержание
Мне нужно обнаружить элемент div
указанного элемента и удалить их. У меня вопрос, как обнаружить цитируемый элемент?
Я подошел к методам, чтобы найти цитируемый элемент из этого.
https://github.com/nylas/nylas-mail/blob/master/packages/client-app/src/services/quoted-html-transformer.es6#L289
Здесь они берут элемент с идентификатором или классом 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);
}