Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

112
Views
Reemplace el texto con una etiqueta de anclaje que puede llamar a una función al hacer clic

Tengo una cadena XML que se muestra en un span en una etiqueta pre :

 <pre className="xmlContainer"> <span id="xml-span"></span> </pre>

El XML se parece a esto:

 <root> <child-to-replace> <child-to-replace/> ... <root/>

Con un número múltiple (desconocido) de la etiqueta child-to-replace .

Reemplazo < y > para mostrar el xml que está contenido en una variable xml :

 let element = document.getElementById('xml-span'); var displayXml = xml.replaceAll('<','&lt;').replaceAll('>','&gt;'); element.innerHTML = displayXml;

También quiero reemplazar todas las instancias de la etiqueta de apertura de child-to-replace con una etiqueta de anclaje que llama a una función updateParentScope . He intentado simplemente reemplazarlo:

 function updateParentScope(scope) { //updates scope for parent } useEffect(() => { let element = document.getElementById('xml-new'); var displayXml = xml.replaceAll('<','&lt;').replaceAll('>','&gt;') .replaceAll('child-to-replace', '<a onclick="updateParentScope(\"sometext\")" >child-to-replace</a>') element.innerHTML = displayXml;) element.innerHTML = replaced; }, [xml])

Esto da Uncaught ReferenceError: updateParentScope is not defined cuando se hace clic.

¿Hay alguna manera de resolver esto o reemplazar el texto es un enfoque incorrecto?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

La solución que encontré fue cambiar la etiqueta de anclaje a un botón, luego obtener el elemento del DOM después de renderizar con un gancho useEffect. Cuando se recupere el elemento, agregue un detector de eventos.

 useEffect(() => { const cond = document.getElementById(btnId) || false; if (cond && !hasEventListener){ var btn = document.getElementById(btnId); btn.addEventListener('click', updateParentScope) setHasEventListener(true); } setHasEventListener(false); })

La cond de condiciones es para asegurarse de que el elemento se represente en el DOM.

Necesitaba agregar hasEventListener al estado para no agregar el detector de eventos varias veces:

 const [hasEventListener, setHasEventListener] = useState(false);

Esta no es una solución ideal ya que la función llamada por el evento de click no acepta parámetros.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!