Как искать и выделять тексты разных сайтов - PullRequest
0 голосов
/ 09 апреля 2020

Я работал над расширением Chrome и столкнулся с проблемой в выделенных предложениях или абзаце и некоторых родительских элементах сайтов, которые посещает клиент. Этот код работал 85% времени, но на некоторых сайтах, через которые я проходил, были ошибки. Мне просто нужны предложения, чтобы я мог их улучшить.

function highlightingText(message, position) {
    const tabP = document.getElementsByTagName('p');
    const tabLi = document.getElementsByTagName('li'); 
    const tabTd = document.getElementsByTagName('td');
    const tabElements = [...tabP, ...tabLi, ...tabTd];
    for (const element of tabElements) {
        if (element.hasChildNodes) {
            if (element.innerText.includes(message)) {
                replacement(
                    element.nodeName,
                    element,
                    message,
                    position,
                    element.className
                );
                break;
            }
        }
    }
}
function replacement(htmlElement, element, message, position, classes) {
    const marker = document.createElement(htmlElement);
    const replaceElem = document.createElement(htmlElement);
    marker.innerHTML = '';
    const regex = new RegExp('(' + message + ')', 'ig');
    const elementStr = element.innerHTML.replace(
        regex,
        "<span id='message-" +
            position +
            "' style='background-color:pink'>" +
            message +
            '</span>'
    );
    element.parentNode.insertBefore(marker, element);
    replaceElem.innerHTML = elementStr;
    element.parentNode.insertBefore(replaceElem, element);
    if (replaceElem.nextElementSibling.innerHTML == element.innerHTML)
        replaceElem.nextElementSibling.parentNode.removeChild(
            replaceElem.nextElementSibling
        );
    marker.parentNode.style.backgroundColor = 'yellow';
    replaceElem.className = classes;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...