Я работал над расширением 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;
}