Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

117
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda