Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

220
Vistas
¿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 la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda