Estou encontrando toneladas de boas respostas de crossbrowser sobre como AJUSTAR o cursor ou a posição do índice circunflexo em um contentEditable
elemento, mas nenhuma sobre como GET ou encontrar seu índice ...
O que eu quero fazer é saber o índice do circunflexo dentro desta div, em keyup
.
Portanto, quando o usuário está digitando um texto, posso saber a qualquer momento o índice do cursor dentro do contentEditable
elemento.
EDIT: Estou procurando o INDEX dentro do conteúdo div (texto), não as coordenadas do cursor.
<div id="contentBox" contentEditable="true"></div>
$('#contentbox').keyup(function() {
// ... ?
});
<a>
elemento dentro de<div>
, qual deslocamento você deseja então? O deslocamento dentro do texto dentro do<a>
?Respostas:
O código a seguir pressupõe:
<div>
e nenhum outro nówhite-space
propriedade CSS definida parapre
Se você precisar de uma abordagem mais geral que funcionará com o conteúdo com elementos aninhados, tente esta resposta:
https://stackoverflow.com/a/4812022/96100
Código:
fonte
<a>
elemento dentro de<div>
, qual deslocamento você deseja então? O deslocamento dentro do texto dentro do<a>
?keyup
provavelmente é o evento errado para isso, mas é o que foi usado na pergunta original.getCaretPosition()
em si está bem dentro de suas próprias limitações.<br>
ou<div>
, o que viola a primeira suposição mencionada na resposta. Se você precisar de uma solução um pouco mais geral, pode tentar stackoverflow.com/a/4812022/96100Algumas rugas que não vejo sendo abordadas em outras respostas:
Esta é uma maneira de obter as posições inicial e final como deslocamentos para o valor textContent do elemento:
fonte
fonte
Experimente isto:
Caret.js Obtenha a posição do cursor e o deslocamento do campo de texto
https://github.com/ichord/Caret.js
demonstração: http://ichord.github.com/Caret.js
fonte
contenteditable
li
quando clicava em um botão para renomearli
o conteúdo.Meio atrasado para a festa, mas no caso de mais alguém estar com dificuldades. Nenhuma das pesquisas do Google que encontrei nos últimos dois dias resultou em algo que funcionasse, mas eu encontrei uma solução concisa e elegante que sempre funcionará, não importa quantas tags aninhadas você tenha:
Ele seleciona todo o caminho de volta ao início do parágrafo e então conta o comprimento da string para obter a posição atual e, em seguida, desfaz a seleção para retornar o cursor à posição atual. Se você quiser fazer isso para um documento inteiro (mais de um parágrafo), mude
paragraphboundary
paradocumentboundary
ou qualquer granularidade para o seu caso. Confira a API para mais detalhes . Felicidades! :)fonte
<div contenteditable> some text here <i>italic text here</i> some other text here <b>bold text here</b> end of text </div>
Everytime I posicionar o cursor antes dai
tag ou qualquer elemento html filho dentrodiv
, a posição do cursor está começando em 0. Existe uma maneira de escapar dessa contagem de reinicialização?fonte
Este funciona para mim:
A linha de chamada depende do tipo de evento, para evento-chave use isto:
para eventos de mouse, use isto:
nesses dois casos, cuido das linhas de quebra adicionando o índice de destino
fonte
Nota: o próprio objeto de intervalo pode ser armazenado em uma variável e pode ser selecionado novamente a qualquer momento, a menos que o conteúdo do div editável pelo conteúdo seja alterado.
Referência para IE 8 e inferior: http://msdn.microsoft.com/en-us/library/ms535872(VS.85).aspx
Referência para navegadores padrão (todos os outros): https://developer.mozilla.org/en/DOM/range (são os documentos do mozilla, mas o código funciona em chrome, safari, opera e ie9 também)
fonte
Range
objeto retornado pela maioria dos navegadores e oTextRange
objeto retornado pelo IE são coisas extremamente diferentes, então não tenho certeza se esta resposta resolve muito.Como isso me levou uma eternidade para descobrir como usar a nova API window.getSelection que irei compartilhar para a posteridade. Observe que o MDN sugere que haja um suporte mais amplo para window.getSelection; no entanto, sua milhagem pode variar.
Aqui está um jsfiddle que dispara no keyup. Observe, entretanto, que os pressionamentos rápidos das teclas direcionais, bem como a exclusão rápida, parecem ser eventos ignorados.
fonte
Uma maneira direta, que itera por todos os filhos do div contenteditable até atingir o endContainer. Em seguida, adiciono o deslocamento final do contêiner e temos o índice de caracteres. Deve funcionar com qualquer número de assentamentos. usa recursão.
Nota: requer um poli preenchimento para, por exemplo, apoiar
Element.closest('div[contenteditable]')
https://codepen.io/alockwood05/pen/vMpdmZ
fonte