Estoy tratando de modificar dinámicamente una cadena dentro de un texto generado por RoboHelp 2017 de Adobe en un sistema de ayuda HTML5.
Estoy tratando de ubicar si el texto "En este tema" existe en el párrafo que sigue a una etiqueta de objeto donde la etiqueta de objeto tiene una ID de MapCtrl.
Aquí hay un fragmento del HTML en cuestión, copiado del Inspector de Firefox:
<object id="MapCtrl" classid="CLSID:A8ECFBF5-08CC-4065-BD74-0FAD1EA61317" data-rhtags="1" class="" width="1" height="1"> </object> <p style="font-family:Arial;font-size:12pt;font-weight: normal;font-style: normal;text-decoration: none;" data-rhtags="1" class="" align="left">In this Topic <a class="dropspot" href="javascript:TextPopup(this)" id="MTHotSpot46267"><span class="MTText" style="display: none;">Show</span><span class="MTText">Hide</span></a></p>Puedo manejar el texto deseado con este código JS:
const minitoc = document.querySelector('#MapCtrl + p'); const text = minitoc.textContent; console.log (typeof text); console.log(text); console.log(text.includes('In this Topic')); console.log(text.indexOf('In this Topic'));En mi consola, puedo verificar que mi variable de texto es de hecho un tipo de cadena. También puedo ver visualmente en la consola que "En este tema" existe en la salida del registro. Sin embargo, mi método .includes siempre devuelve falso. (.indexOf tampoco funciona)
Pensé que tal vez estaba fallando debido a la códigos agregados en esa cadena en el HTML, pero también probé esta variación, pero tampoco funcionó:
console.log(text.includes('In this Topic'));Por extraño que parezca, puede encontrar palabras individuales muy bien. Por ejemplo, esto devuelve verdadero:
console.log(text.includes('Topic'));Pero cada vez que trato de agregar un espacio para buscar la frase completa, "En este tema", devuelve falso.
Busqué en línea una solución y estudié la sección de MDN sobre el método .includes . pero no puedo entender por qué devuelve falso.
Gracias de antemano por su ayuda.
El método includes busca el texto en la cadena.
No analiza ningún HTML.
Si la cadena incluye un espacio de no separación, entonces necesita un espacio de no separación real ( ) o la secuencia de escape de JavaScript para uno ( \xa0 ). No puede usar una entidad HTML ( ) o un espacio regular ( ).
Sería interesante ver qué sucede si itera sobre el texto para imprimir los valores Unicode de los caracteres, tal vez eso conduzca a información valiosa
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt