Eu tenho uma página com muitas caixas de texto. Quando alguém clica em um link, quero que uma ou duas palavras sejam inseridas onde está o cursor ou anexadas à caixa de texto que tem o foco.
Por exemplo, se o cursor / foco estiver em uma caixa de texto dizendo 'apple' e ele clicar em um link dizendo '[email]', então eu quero que a caixa de texto diga 'apple [email protected]'.
Como posso fazer isso? Isso é possível, e se o foco estiver em um elemento de rádio / menu suspenso / sem caixa de texto? A última focada na caixa de texto pode ser lembrada?
javascript
jquery
Click Voto a favor
fonte
fonte
Respostas:
Use isso aqui :
fonte
areaId
?function deleteTxt() { var ele = document.getElementById('yourTextarea'); var text = ele.value; text = text.slice(0, ele.selectionStart) + text.slice(ele.selectionEnd); ele.value = text; return text; }
Talvez uma versão mais curta, seria mais fácil de entender?
Eu escrevi isso em resposta a Como adicionar um texto a uma caixa de texto a partir da posição atual do ponteiro com jquery?
fonte
document.getElementById("txt").selectionStart = caretPos + txtToAdd.length
.A resposta aprovada de George Claghorn funcionou muito bem para simplesmente inserir texto na posição do cursor. Se o usuário selecionou o texto e você deseja que o texto seja substituído (a experiência padrão com a maioria dos textos), faça uma pequena alteração ao definir a variável 'back'.
Além disso, se você não precisar oferecer suporte a versões mais antigas do IE, as versões modernas suportam textarea.selectionStart, para que você possa remover toda a detecção do navegador e o código específico do IE.
Aqui está uma versão simplificada que funciona pelo menos para Chrome e IE11 e lida com a substituição do texto selecionado.
fonte
maxlength
em conta o elemento , portanto o valor resultante após a inserção pode ser maior que o máximo.O código acima não funcionou para mim no IE. Aqui está um código com base nesta resposta .
Tirei o
getElementById
para poder referenciar o elemento de uma maneira diferente.EDIT: Adicionado um snippet em execução, o jQuery não está sendo usado .
fonte
element.focus()
é um método JavaScript legítimo em DOMElements: w3schools.com/jsref/met_html_focus.aspusando a resposta @quick_sliv:
fonte
Como inserir algum texto na posição atual do cursor de um TextBox por JQuery e JavaScript
Processo
Aqui eu tenho 2 TextBoxes e um botão. Eu tenho que clicar em uma determinada posição em uma caixa de texto e, em seguida, clique no botão para colar o texto da outra caixa de texto para a posição da caixa de texto anterior.
O principal problema aqui é que, obtendo a posição atual do cursor onde colaremos o texto.
fonte
A adição de texto à posição atual do cursor envolve duas etapas:
Demonstração: https://codepen.io/anon/pen/qZXmgN
Testado no Chrome 48, Firefox 45, IE 11 e Edge 25
JS:
HTML:
fonte
Eu acho que você poderia usar o seguinte JavaScript para rastrear a última caixa de texto focada:
Uso:
Uma solução anterior (props para gclaghorn) usa a área de texto e calcula a posição do cursor também, portanto, pode ser melhor para o que você deseja. Por outro lado, este seria mais leve, se é isso que você está procurando.
fonte
A resposta aceita não funcionou para mim no Internet Explorer 9. Eu verifiquei e a detecção do navegador não estava funcionando corretamente, detectou ff (firefox) quando eu estava no Internet Explorer.
Acabei de fazer essa alteração:
Ao invés de:
O código resultante é este:
fonte
Este plugin jQuery oferece uma maneira pré-fabricada de seleção / manipulação de sinal de intercalação.
fonte
você pode focar apenas a caixa de texto necessária e inserir o texto nela. não há como descobrir onde o foco está no AFAIK (talvez interagindo em todos os nós do DOM?).
verifique este stackoverflow - ele tem uma solução para você: Como descobrir qual elemento DOM tem o foco?
fonte
Conteúdo editável, HTML ou qualquer outro elemento DOM
Se você estiver tentando inserir um sinal de intercalação em a
<div contenteditable="true">
, isso se tornará muito mais difícil, especialmente se houver filhos no contêiner editável.Eu tive muita sorte usando a biblioteca Rangy :
Ele tem vários recursos excelentes, como:
A demonstração on-line não estava funcionando da última vez que verifiquei, no entanto, o repositório tem demos em funcionamento. Para começar, faça o download do repositório Git ou NPM e abra ./rangy/demos/index.html
Isso facilita o trabalho com pontos de intercalação e seleção de texto!
fonte
A resposta desta pergunta foi postada há muito tempo e eu a encontrei através de uma pesquisa no Google. O HTML5 fornece a API HTMLInputElement que inclui o método setRangeText () , que substitui um intervalo de texto em um elemento
<input>
ou<textarea>
por uma nova string:O exemplo acima substituiria a seleção feita por dentro
element
comabc
. Você também pode especificar qual parte do valor de entrada substituir:O texto acima substituiria os caracteres de 4 a 6 do valor de entrada por
abc
. Você também pode especificar como a seleção deve ser definida após a substituição do texto, fornecendo uma das seguintes seqüências de caracteres como o quarto parâmetro:'preserve'
tenta preservar a seleção. Esse é o padrão.'select'
seleciona o texto recém-inserido.'start'
move a seleção para pouco antes do texto inserido.'end'
move a seleção para logo após o texto inserido.Compatibilidade do navegador
A página MDN para setRangeText não fornece dados de compatibilidade do navegador, mas acho que seria o mesmo que HTMLInputElement.setSelectionRange () , que é basicamente todos os navegadores modernos, IE 9 e superior, Edge 12 e superior.
fonte