Con esta edición, trato de ser más específico con mi pregunta y agregar mi último intento para resolver el problema: un complemento del navegador reemplaza algunas palabras en un sitio web. ¡Esta parte funciona! Ahora hay un texto que no debe ser reemplazado. Este texto está dentro de la clase "msg_content", por ejemplo
<span class="msg_content">don't replace my words</span>.Esta parte hace el trabajo de reemplazo y debe omitir elementos con la clase "msg_content":
function replaceText (node) { if (node.nodeType === Node.TEXT_NODE) { //skip msg_content try { let note = document.querySelector('.msg_content'); if (node == note){ console.log("skip chat-area"); return; } } catch (e) { console.log(e); } let content = node.textContent; for (let [word, emoji] of langMap) { const regex = regexs.get(word); content = content.replace(regex, emoji); } node.textContent = content; } else { for (let i = 0; i < node.childNodes.length; i++) { replaceText(node.childNodes[i]); } } } replaceText(document.body);El reemplazo funciona bien, pero no omite msg_content.
Si desea verificar si una cadena está vacía, puede usar string.length . string.trim() en caso de que el div contenga espacios en blanco que son comunes en HTML:
function replaceText (node) { if (node.nodeType === Node.TEXT_NODE) { // My try to skip specific area here (doesn't work) //if (document.getElementById("chatBar")) { // return; //} let content = node.textContent; if (!content.trim().length) return; // skip if content is empty for (let [word, emoji] of langMap) { const regex = regexs.get(word); content = content.replace(regex, emoji); } node.textContent = content; } else { // This node contains more than just text, call replaceText() on each // of its children. for (let i = 0; i < node.childNodes.length; i++) { replaceText(node.childNodes[i]); } } } replaceText(document.body);