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

221
Visualizações
¿Cómo puedo obtener la posición del símbolo de intercalación cuando abarca varios rectángulos?

Estoy haciendo un editor WYSIWYG usando contenteditable . En lugar de usar el símbolo de intercalación que muestra el navegador, necesito dibujar mi propio símbolo de intercalación simulado (para solucionar los errores del navegador ). Necesito obtener la posición exacta del símbolo de intercalación parpadeante, para poder dibujar mi propio símbolo de intercalación en esa posición.

Una llamada a document.getSelection().getRangeAt(0).getClientRects() casi funciona, pero hay un caso límite: cuando el signo de intercalación está al principio o al final de una línea. Vea esta demostración:

 const caretEl = document.getElementById('caret'); const updateFakeCaret = () => { const sel = document.getSelection(); if (!sel) return undefined; if (sel.rangeCount !== 1) return undefined; const range = sel.getRangeAt(0); const clientRectList = range.getClientRects(); const selectionRect = clientRectList.item(0); if (!selectionRect) return undefined; caretEl.style.top = selectionRect.top + window.scrollY + 'px'; caretEl.style.left = selectionRect.left + window.scrollX + 'px'; caretEl.style.width = selectionRect.width + 'px'; caretEl.style.height = selectionRect.height + 'px'; }; document.addEventListener('selectionchange', updateFakeCaret); window.addEventListener('resize', updateFakeCaret);
 .editor { padding: 1em; white-space: pre-wrap; max-width: 20em; background-color: lightgrey; } #caret { position: absolute; z-index: 999; pointer-events: none; outline: 1px solid red; }
 <div class=editor contenteditable>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div> <div id=caret></div>

Cuando hace clic al final de la línea 2, el cursor aparece al final de la línea 2. Cuando hace clic al principio de la línea 3, el cursor aparece al principio de la línea 3. ¡Pero esas son exactamente la misma ubicación ! Con la API document.getSelection , ambas posiciones parecen idénticas y devuelven los mismos dos rectángulos de cliente. Pero claramente no son idénticos, porque el navegador (al menos Chrome y Firefox) dibuja su propio signo de intercalación en diferentes posiciones dependiendo de la interacción del usuario.

¿Hay alguna forma de distinguir entre "intercalación al final de la línea" y "intercalación al comienzo de la línea"? ¿Existe otra forma confiable de obtener la posición exacta de la pantalla del signo de intercalación?

about 4 years ago · Juan Pablo Isaza
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