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

219
Views
¿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
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!