Como você obtém a posição do cursor em um <textarea>
JavaScript usando?
Por exemplo: This is| a text
Isso deve retornar 7
.
Como você faria para retornar as strings ao redor do cursor / seleção?
Por exemplo: 'This is', '', ' a text'
.
Se a palavra "é" estiver destacada, ela retornará 'This ', 'is', ' a text'
.
javascript
cursor
textarea
caret
Andarilho Inquieto
fonte
fonte
textarea.selectionStart
,textarea. selectionEnd
,textarea.setSelectionRange
developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElementRespostas:
Com o Firefox, Safari (e outros navegadores baseados no Gecko), você pode facilmente usar textarea.selectionStart, mas para o IE que não funcionar, você precisará fazer algo assim:
( código completo aqui )
Também recomendo que você verifique o plug- in jQuery FieldSelection , ele permite que você faça isso e muito mais ...
Edit: Na verdade, reimplementei o código acima:
Veja um exemplo aqui .
fonte
Safari (and other Gecko based browsers)
parece sugerir que o Safari usa o Gecko. Gecko é o motor da Mozilla; O Safari usa o WebKit.if (el.selectionStart) { return el.selectionStart; }
...Atualizado 5 de setembro de 2010
Visto que todo mundo parece ser direcionado aqui para esse problema, estou adicionando minha resposta a uma pergunta semelhante, que contém o mesmo código que esta resposta, mas com o histórico completo para aqueles que estão interessados:
O document.selection.createRange do IE não inclui linhas em branco à esquerda ou à direita
A explicação de quebras de linha à direita é complicada no IE, e não vi nenhuma solução que faça isso corretamente, incluindo outras respostas a essa pergunta. É possível, no entanto, usar a seguinte função, que retornará o início e o final da seleção (que são iguais no caso de um sinal de intercalação) dentro de um
<textarea>
texto ou<input>
.Observe que a área de texto deve ter foco para que essa função funcione corretamente no IE. Em caso de dúvida, chame o
focus()
método da área de texto primeiro.fonte
range && range.parentElement() == el
Existe para testar se a seleção está dentro da área de texto e é necessária. Não há nenhum problema com a função de obter a posição do cursor , desde que a área de texto tenha o foco . Se não tiver certeza, chame ofocus()
método da área de texto antes de chamargetInputSelection()
. Vou adicionar uma nota à resposta.mousedown
evento ou adicionandounselectable="on"
ao<div>
elemento.Modifiquei a função acima para contabilizar retornos de carro no IE. Não foi testado, mas fiz algo semelhante com ele no meu código, portanto deve ser viável.
fonte
Se você não precisar oferecer suporte ao IE, poderá usar
selectionStart
eselectionEnd
atributos detextarea
.Para obter a posição do cursor, use
selectionStart
:Para obter as seqüências de caracteres ao redor da seleção, use o seguinte código:
Demonstração no JSFiddle .
Consulte também os documentos HTMLTextAreaElement .
fonte