Eu amo o jQuery – não tenho nada contra o javascript puro, mas o nascimento do framework jQuery matou muitos dos meus pontos pessoais de javascript. Aqui está um problema que resolvemos recentemente no trabalho, em que queríamos truncar o texto para um determinado comprimento de caractere, mas voltar para o espaço mais próximo para não truncar no meio da palavra.
Para entender a solução mais fácil, primeiro é importante entender que com jQuery você pode passar uma função para métodos setter e retornar o valor que você deseja definir. Por exemplo :
$('#myText').text(function() {
return 'this is my new text'
});
Agora, tudo o que precisamos fazer é escrever uma função que, dada uma string, faz o trabalho. Bem, isso é bastante fácil:
function maxLength(maxLen)
{
return function truncateToNearestSpace(idx, text)
{
// this may chop in the middle of a word
var truncated = text.substr(0, maxLen);
if (/[^s]$/.test(truncated))
return truncated.replace(/s[^s]+$/, "");
else
return truncated.trim();
}
}
E como você usa isso?
// usage
$('.selector').text(maxLength(50));
Alguma pergunta? A função maxLength retorna uma função truncadora personalizada que é construída com o maxLen
valor. A truncateToNearestSpace
função primeiro trunca para o comprimento exato de, em maxLen
seguida, faz um pequeno trabalho:
if (/[^s]$/.test(truncated))
Se suas habilidades regEx forem mais fracas, você pode não reconhecer isso, mas verifica se o último caractere não é um espaço. Se não for, substituímos o último espaço e tudo que vem depois dele e retornamos o resultado.
A outra opção é a string, depois de ser truncada, termina em um espaço, caso em que retiramos o espaço e o devolvemos, com .trim()
– este método não é compatível com o IE antigo, mas há uma maneira fácil e barata de adicioná-lo para o IE :
''.trim||(String.prototype.trim=function(){
return this.replace(/^[suFEFF]+|[suFEFF]+$/g,'')
});