Alguém tem uma solução / biblioteca mais sofisticada para truncar seqüências de caracteres com JavaScript e colocar reticências no final do que a óbvia:
if (string.length > 25) {
string = string.substring(0, 24) + "...";
}
javascript
string
truncation
naltatis
fonte
fonte
Respostas:
Essencialmente, você verifica o comprimento da sequência especificada. Se for maior que um determinado comprimento
n
, prenda-o no comprimenton
(substr
ouslice
) e adicione a entidade html…
(…) à sequência cortada.Esse método parece
Se por "mais sofisticado" você quer dizer truncar no limite da última palavra de uma string, precisa de uma verificação extra. Primeiro, você recorta a string no comprimento desejado, depois recorta o resultado dela no limite da última palavra
Você pode estender o
String
protótipo nativo com sua função. Nesse caso, ostr
parâmetro deve ser removido e,str
dentro da função, deve ser substituído porthis
:Mais desenvolvedores dogmáticos podem capitular você fortemente nisso (" Não modifique objetos que você não possui ". Eu não me importaria).
Uma abordagem sem estender o
String
protótipo é criar seu próprio objeto auxiliar, contendo a cadeia (longa) fornecida e o método mencionado para truncá-lo. É isso que o trecho abaixo faz.Mostrar snippet de código
Por fim, você pode usar o css apenas para truncar seqüências longas em nós HTML. Dá menos controle, mas pode ser uma solução viável.
Mostrar snippet de código
fonte
substr
é um comprimento, portanto, deve-sesubstr(0,n)
limitá-lo aos primeirosn
caracteres.…
reticências reais (...
) no seu exemplo de código. Se você estiver tentando usar isso para interagir com as APIs, precisará da entidade não HTML.Observe que isso só precisa ser feito para o Firefox.Todos os
outrosnavegadores suportam uma solução CSS (consulte a tabela de suporte ):A ironia é que eu peguei esse trecho de código do Mozilla MDC.
fonte
white-space: nowrap;
). Quando se trata de mais de uma linha, você fica com o JavaScript.Your picture ('some very long picture filename truncated...') has been uploaded.
Existem razões válidas pelas quais as pessoas podem querer fazer isso em JavaScript, em vez de CSS.
Para truncar até 8 caracteres (incluindo reticências) em JavaScript:
ou
fonte
.replace(/^(.{7}).{2,}/, "$1…");
vezlong
eshort
são reservadas como palavras-chave futuras pelas especificações mais antigas do ECMAScript (ECMAScript 1 a 3). Veja MDN: futuras palavras-chave reservadas em padrões mais antigosUse o truncado do lodash
ou underscore.string está truncado .
fonte
De alguma forma, o código acima não estava funcionando para algum tipo de cópia colada ou texto escrito no aplicativo vuejs. Então eu usei o Lodash Truncate e agora está funcionando bem.
fonte
Aqui está minha solução, que possui algumas melhorias em relação a outras sugestões:
Isto:
fonte
Melhor função que encontrei. Crédito para reticências de texto .
Exemplos :
fonte
Todos os navegadores modernos agora oferecem suporte a uma solução CSS simples para adicionar reticências automaticamente se uma linha de texto exceder a largura disponível:
(Observe que isso requer que a largura do elemento seja limitada de alguma forma para ter algum efeito.)
Com base em https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/ .
Note-se que essa abordagem não se limita com base no número de caracteres. Também não funciona se você precisar permitir várias linhas de texto.
fonte
text-direction: rtl
etext-align: left
. Veja davidwalsh.name/css-ellipsis-leftAs estruturas Javascript mais modernas ( JQuery , Prototype , etc ...) têm uma função de utilitário anexada a String que lida com isso.
Aqui está um exemplo no Prototype:
Parece uma daquelas funções que você deseja que outra pessoa lide / mantenha. Eu deixaria a estrutura lidar com isso, em vez de escrever mais código.
fonte
truncate()
- você pode precisar de uma extensão como underscore.string ._.trunc
que faz exatamente isso.Talvez eu tenha perdido um exemplo de onde alguém está lidando com nulos, mas três respostas TOP não funcionaram para mim quando eu tinha nulos. Eu tinha usado uma função existente junto com uma das excelentes respostas de reticências de truncamento que pensei que forneceria para outras pessoas.
por exemplo
javascript:
usando a função de truncamento
No entanto, em news.comments ser nulo, isso "quebraria"
Final
função trunc cortesia de KooiInc
Meu verificador nulo simples (verifica também a coisa "nula" literal (isso pega indefinido ",", nulo, "nulo", etc.)
fonte
Às vezes, os nomes dos arquivos são numerados, onde o índice pode estar no início ou no final. Então, eu queria encurtar do centro da string:
Esteja ciente de que usei um caractere de preenchimento aqui com mais de 1 byte em UTF-8.
fonte
Você pode usar a função Ext.util.Format.ellipsis se estiver usando Ext.js.
fonte
Votei na solução do Kooilnc. Solução compacta realmente agradável. Há um pequeno caso que gostaria de abordar. Se alguém inserir uma sequência de caracteres muito longa por qualquer motivo, ela não será truncada:
fonte
Com uma rápida pesquisa no Google, achei isso ... Isso funciona para você?
fonte
Estouro de texto: reticências são a propriedade que você precisa. Com isso e um estouro: oculto com uma largura específica, tudo o que ultrapassar terá o efeito de três períodos no final ... Não se esqueça de adicionar espaço em branco: nowrap ou o texto será colocado em várias linhas.
fonte
A resposta de c_harm é, na minha opinião, a melhor. Observe que se você quiser usar
você precisará usar um construtor de objeto regexp em vez de um literal. Além disso, você terá que escapar
\S
ao convertê-lo.fonte
Use o seguinte código
fonte
Corrigindo a solução da Kooilnc:
Isso retorna o valor da string em vez do objeto String, se não precisar ser truncado.
fonte
Recentemente, tive que fazer isso e acabei com:
Parece bom e limpo para mim :)
fonte
Eu gosto de usar .slice () O primeiro argumento é o índice inicial e o segundo é o índice final. Tudo no meio é o que você recebe de volta.
fonte
Em algum lugar inteligente: D
fonte
Essa função também trunca as partes do espaço e das palavras (por exemplo: Mãe na Mariposa ...)
uso:
resultado:
fonte