saída no Chrome :
<div id="content" contenteditable="true" style="border:1px solid #000;width:500px;height:40px;">
hey
<div>what's up?</div>
<div>
<button id="insert_caret"></button>
Eu acredito que o FF seria mais ou menos assim:
hey
<br />
what's up?
e no IE :
hey
<p>what's up?</p>
infelizmente, não há uma maneira legal de fazer com que cada navegador insira uma <br />
tag em vez de div ou p, ou pelo menos eu não consegui encontrar nada online.
DE QUALQUER MANEIRA, o que estou tentando fazer agora é, quando eu apertar o botão , quero que o acento circunflexo seja definido no final do texto, então ele deve ser parecido com isto:
hey
what's up?|
alguma maneira de fazer isso para que funcione em todos os navegadores ?
exemplo:
$(document).ready(function()
{
$('#insert_caret').click(function()
{
var ele = $('#content');
var length = ele.html().length;
ele.focus();
//set caret -> end pos
}
}
javascript
html
cross-browser
contenteditable
caret
Josh Crozier
fonte
fonte
Respostas:
A função a seguir fará isso em todos os principais navegadores:
Colocar o acento circunflexo no início é quase idêntico: requer apenas a alteração do booleano passado nas chamadas para
collapse()
. Aqui está um exemplo que cria funções para colocar o cursor no início e no final:fonte
window.getSelection
edocument.createRange
. AcreateTextRange
ramificação é para versões antigas do Internet Explorer.window.getSelection
não era compatível com 0,29% de todos os navegadores (IE> 8). consulte: caniuse.com/#search=window.getSelectioneditablecontent="true"
...?placeCaretAtEnd(this);
não vai funcionar para mim.Infelizmente, a excelente resposta de Tim funcionou para mim apenas para colocar no final; para colocar no início, tive que modificá-la ligeiramente.
Não tenho certeza se
focus()
eselect()
são realmente necessários.fonte
Este exemplo (ao vivo) mostra uma função simples curta,,
setCaretAtStartEnd
que recebe dois argumentos; Um nó (editável) para colocar o circunflexo e um booleano indicando onde colocá-lo (início ou fim do nó)fonte
Se estiver usando o compilador google closure, você pode fazer o seguinte (um pouco simplificado pela resposta de Tim):
Aqui está a mesma coisa em ClojureScript:
Eu testei isso no Chrome, Safari e FireFox, não tenho certeza sobre o IE ...
fonte