Eu tenho um contenteditable
elemento, e sempre que digito algumas coisas e clico ENTER
nele, cria um novo <div>
e coloca o novo texto de linha lá. Eu não gosto disso nem um pouco.
É possível impedir que isso aconteça ou pelo menos apenas substituí-lo por um <br>
?
Aqui está a demonstração http://jsfiddle.net/jDvau/
Nota: Este não é um problema no Firefox.
Respostas:
Tente o seguinte:
Clique aqui para demonstração
fonte
Você pode fazer isso apenas com uma alteração de CSS:
http://jsfiddle.net/ayiem999/HW43Q/
fonte
Adicione o estilo
display:inline-block;
acontenteditable
, não vai gerardiv
,p
espan
automaticamente no Chrome.fonte
*[contenteditable="true"]{display: inline-block;}
<p></p>
:(Tente o seguinte:
http://jsfiddle.net/rooseve/jDvau/3/
fonte
input
não seja acionado quando você pressiona enter. Uma solução simples: add sth como$(this).trigger('input')
insertHTML
solução faz algumas coisas estranhas quando existemcontenteditable
elementos aninhados , sua solução contorna isso, mas há mais alguns problemas, eu a adicionei como uma nova solução possível.Ele substitui o comportamento padrão para ter um parágrafo.
No chrome, o comportamento padrão em enter é:
Com esse comando, vai ser
Agora que é mais linear, é fácil ter apenas
<br>
o necessário.fonte
Use shift+ em entervez de enterapenas inserir uma única
<br>
tag ou agrupar seu texto em<p>
tags.fonte
O modo como
contenteditable
se comporta quando você pressiona enterdepende dos navegadores, o que<div>
acontece no webkit (chrome, safari) e no IE.Eu lutei com isso há alguns meses e corrigi-o desta maneira:
Espero que ajude, e desculpe pelo meu inglês, se não estiver tão claro quanto necessário.
EDIT : Correção da função jQuery removida
jQuery.browser
fonte
jQuery.browser
não faz mais parte do jQuery.navigator.userAgent.indexOf("msie") > 0
enavigator.userAgent.indexOf("webkit") > 0
if( ( e.keyCode || e.witch ) == 13 ) { ... }
precisa serif (e.keyCode === 13 || e.which === 13) { ... }
Eu gosto de usar a ratoeira para manipular teclas de atalho: https://craig.is/killing/mice
Então, apenas intercepto o evento enter, executando um comando insertLineBreak :
Funciona usando o Chrome 75 e o seguinte elemento editável:
Também é possível usar o insertHTML :
fonte
adicione um padrão de prevenção à div
fonte
document.body.div
(você provavelmente terá que colocar em algum outro código para apontar para corrigirdiv
o seu apenas a idéia geral)Eu usaria o estilo (Css) para corrigir o problema.
O Firefox realmente adiciona uma quebra de elemento de bloco
, enquanto o Chrome envolve cada seção em uma tag. Você css fornece aos divs um preenchimento de 10px junto com a cor de fundo.
Como alternativa, você pode replicar o mesmo efeito desejado no jQuery:
Aqui está um garfo do seu violino http://jsfiddle.net/R4Jdz/7/
fonte
contenteditable
e usá-lo em outros lugaresVocê pode ter
<p>
tags separadas para cada linha, em vez de usar<br>
tags e obter maior compatibilidade com o navegador imediatamente.Para fazer isso, coloque uma
<p>
tag com algum texto padrão dentro da div contenteditable.Por exemplo, em vez de:
Usar:
jsfiddle
Testado no Chrome, Firefox e Edge, e o segundo funciona da mesma maneira em cada um.
O primeiro, no entanto, cria divs no Chrome, cria quebras de linha no Firefox e no Edge cria divs e o cursor é colocado de volta no início da div atual, em vez de passar para a próxima.
Testado no Chrome, Firefox e Edge.
fonte
Você pode
<p>
agrupar seus parágrafos com a tag, por exemplo, apareceria na nova linha em vez de div Exemplo:<div contenteditable="true"><p>Line</p></div>
Após inserir uma nova string:
<div contenteditable="true"><p>Line</p><p>New Line</p></div>
fonte
A
inserHTML
solução de comando faz algumas coisas estranhas quando você aninhacontenteditable
elementos.Peguei algumas idéias de várias respostas aqui, e isso parece atender às minhas necessidades por enquanto:
fonte
Tente usar o ckeditor. Ele também fornece formatação como esta em SOF.
https://github.com/galetahub/ckeditor
fonte
Primeiro, precisamos capturar cada usuário-chave enter para ver se enter é pressionado, então evitamos a
<div>
criação e criamos nossa própria<br>
tag.Há um problema: quando o criamos, nosso cursor permanece na mesma posição, por isso usamos a API de seleção para colocar nosso cursor no final.
Não se esqueça de adicionar uma
<br>
tag no final do seu texto, porque se você não inserir o primeiro, não criará uma nova linha.Violino
fonte
Este é o editor HTML5 direcionado ao navegador. Você pode agrupar seu texto e
<p>...</p>
, sempre que pressionar ENTER, obtém<p></p>
. Além disso, o editor funciona dessa maneira que sempre que você pressiona SHIFT + ENTER, ele é inserido<br />
.Verifique isso: http://jsfiddle.net/ZQztJ/
fonte
Isso funciona em todos os principais navegadores (Chrome, Firefox, Safari, Edge)
Há um inconveniente. Depois de terminar a edição, os elementos podem conter uma final
<br>
dentro. Mas você pode adicionar código para reduzi-lo, se necessário.Verifique esta resposta para remover o https://stackoverflow.com/a/61237737/670839 à direita
<br>
fonte
Onde
this
está o contexto atual, o que significadocument.getElementById('test');
.fonte
Outra maneira de fazer isso
http://jsfiddle.net/jDvau/11/
fonte
Impedir a criação de novas div no conteúdo editável Div em cada tecla enter: Solução que eu acho muito simples:
Esse conteúdo --- innerHTML impede a criação de Nova Div no Div editável de conteúdo em cada tecla Enter.
fonte
No rascunho do editor do W3C, há algumas informações sobre como adicionar estados ao ContentEditable e para impedir que o navegador adicione novos elementos ao pressionar enter, você pode usar
plaintext-only
.fonte
É possível impedir esse comportamento completamente.
Veja este violino
fonte