Lo que quiero lograr es que una vez que se cargue una página web, encuentre algún texto en ella y resalte el texto. Mi código lo que he escrito hasta ahora es el siguiente.
Primero hago coincidir el contenido de textContent usando una expresión regular (¿Por qué estoy usando este enfoque porque no tengo la ID o el nombre para el div donde está presente el contenido de textContent , por lo tanto, no puedo ir a getElementsByName() o getElementById() ) . Para verificar si el texto existe, primero comparo su longitud y luego procedo a resaltarlo.
El texto que encuentro está en el índice 0 de la variable de text . No puedo acceder al método backgroundColor() , por eso se ha comentado por ahora. Podía acceder a fontcolor() pero ni siquiera parecía funcionar.
Soy nuevo en JS, por lo que agradecería mucho alguna dirección.
fontcolor() no funciona aunque puedo acceder a él.backgroundColor() ? (function highlightText(){ let text = document.body.textContent.match(/abcxyz/); if (text[0].length == 6) { text[0].fontcolor('yellow'); //text[0].backgroundColor('yellow'); console.log(text[0]); //prints abcxyz return text[0]; } return null; })()SOLUCIÓN: El enfoque basado en la solución proporcionada por @forlen:
Lo que hice fue recorrer todos los nodos, si el contenido de texto coincide con la expresión regular, luego los textContent en una matriz y, como sabía que lo que quería era el elemento raíz, obtuve el último elemento de la matriz y cambié su color de backgroundColor .
(function highlightText() { let allNodes = document.body.getElementsByTagName("*"); var arr= []; for (let node of allNodes) { if (node.textContent.match(/abcxyz/)) { arr.push(node); } } text = arr[(arr.length)-2]; text.style.backgroundColor = "yellow"; })();Recomiendo recorrer todos los nodos en el cuerpo y cambiar el estilo de esta manera:
(function highlightText() { let allNodes = document.body.getElementsByTagName("*"); for (let node of allNodes) { if (node.textContent === "abcxyz") { node.style.color = "yellow"; } } })();