Estou fazendo jQuery pegar algum conteúdo textarea e inseri-lo em um li.
Quero reter visualmente as quebras de linha.
Deve haver uma maneira realmente simples de fazer isso ...
javascript
jquery
line-breaks
gbhall
fonte
fonte
Respostas:
fonte
você pode simplesmente fazer:
fonte
Coloque isso em seu código (de preferência em uma biblioteca de funções js geral):
Uso:
criar uma função de protótipo de string permite que você use isso em qualquer string.
fonte
No espírito de alterar a renderização em vez de alterar o conteúdo , o seguinte CSS faz com que cada nova linha se comporte como um
<br>
:Por que duas regras:
pre-line
afeta apenas novas linhas (obrigado pela dica, @KevinPauli). O IE6-7 e outros navegadores antigos voltam ao mais extremo,pre
que também incluinowrap
e renderiza vários espaços. Detalhes sobre essas e outras configurações (pre-wrap
) em mozilla e css-tricks (obrigado @Sablefoste).Embora eu geralmente seja avesso à predileção do SO por adivinhar a questão em vez de respondê-la, neste caso substituindo novas linhas por
<br>
marcação pode aumentar a vulnerabilidade a ataques de injeção com entrada de usuário não lavada. Você está cruzando uma linha vermelha brilhante sempre que está mudando as.text()
ligações.html()
que a pergunta literal implica que teriam que ser feitas. (Obrigado @AlexS por destacar este ponto.) Mesmo se você descartar um risco de segurança no momento, alterações futuras podem introduzi-lo inadvertidamente. Em vez disso, este CSS permite que você obtenha quebras de linha rígidas sem marcação usando o mais seguro.text()
.fonte
white-space:
opções, comopre-wrap
. Consulte css-tricks.com/almanac/properties/w/whitespace.html()
para definir o conteúdo, o que, por sua vez, permitiria ao usuário inserir HTML arbitrário, a menos que você o filtrasse com antecedência..html()
perigo @AlexS, tentei incorporar.Solução
Use este código
fonte
Esta função JavaScript considera se deve usar inserir ou substituir para lidar com a troca.
(Insira ou substitua quebras de linha HTML)
Demo - JSFiddle
fonte
Eu escrevi uma pequena extensão jQuery para isso:
fonte
para melhorar a resposta aceita de @Luca Filosofi,
se necessário, alterar a cláusula inicial desta regex para ser
/([^>[\s]?\r\n]?)
também ingore os casos em que a nova linha vem após uma tag E alguns espaços em branco, em vez de apenas uma tag imediatamente seguida por uma nova linhafonte
Outra maneira de inserir texto de uma área de texto no DOM mantendo as quebras de linha é usar a propriedade Node.innerText que representa o conteúdo de texto renderizado de um nó e seus descendentes.
Como getter, ele se aproxima do texto que o usuário obteria se destacasse o conteúdo do elemento com o cursor e, em seguida, copiasse para a área de transferência.
A propriedade se tornou padrão em 2016 e é bem suportada por navegadores modernos. Posso usar : cobertura global de 97% quando postei esta resposta.
fonte