String.prototype.trunc = String.prototype.trunc ||
function(n){
return (this.length > n) ? this.substr(0, n-1) + '…' : this;
};
Теперь вы можете:
var s = 'not very long';
s.trunc(25); //=> not very long
s.trunc(5); //=> not ...
Если под «более сложным» вы подразумеваете усечение на границе последнего слова строки, то это может быть то, что вам нужно:
String.prototype.trunc =
function( n, useWordBoundary ){
if (this.length <= n) { return this; }
var subString = this.substr(0, n-1);
return (useWordBoundary
? subString.substr(0, subString.lastIndexOf(' '))
: subString) + "…";
};
теперь вы можно делать:
s.trunc(11,true) // => not very...
Если вы не хотите расширять собственные объекты, вы можете использовать:
function truncate( n, useWordBoundary ){
if (this.length <= n) { return this; }
var subString = this.substr(0, n-1);
return (useWordBoundary
? subString.substr(0, subString.lastIndexOf(' '))
: subString) + "…";
};
// usage
truncate.apply(s, [11, true]); // => not very...
С быстрым поиском в Google я нашел это ... Это работает для вас?
/**
* Truncate a string to the given length, breaking at word boundaries and adding an elipsis
* @param string str String to be truncated
* @param integer limit Max length of the string
* @return string
*/
var truncate = function (str, limit) {
var bits, i;
if (STR !== typeof str) {
return '';
}
bits = str.split('');
if (bits.length > limit) {
for (i = bits.length - 1; i > -1; --i) {
if (i > limit) {
bits.length = i;
}
else if (' ' === bits[i]) {
bits.length = i;
break;
}
}
bits.push('...');
}
return bits.join('');
};
// END: truncate
Большинство современных фреймворков Javascript ( JQuery , Prototype , и т. д. ...) к String прикреплена служебная функция, которая этим занимается.
Вот пример в Prototype:
'Some random text'.truncate(10);
// -> 'Some ra...'
Это похоже на одну из тех функций, которые вы хотите, чтобы кто-то другой имел дело / обслуживал. Я бы позволил фреймворку справиться с этим, вместо того, чтобы писать больше кода.
Обратите внимание, что это нужно сделать только для Firefox.
Все другие браузеры поддерживают решение CSS (см. таблицу поддержки ):
p {
white-space: nowrap;
width: 100%; /* IE6 needs any width */
overflow: hidden; /* "overflow" value must be different from visible"*/
-o-text-overflow: ellipsis; /* Opera < 11*/
text-overflow: ellipsis; /* IE, Safari (WebKit), Opera >= 11, FF > 6 */
}
По иронии судьбы, я получил этот фрагмент кода из Mozilla MDC.
Вот мое решение, которое имеет несколько улучшений по сравнению с другими предложениями:
String.prototype.truncate = function(){
var re = this.match(/^.{0,25}[\S]*/);
var l = re[0].length;
var re = re[0].replace(/\s$/,'');
if(l < this.length)
re = re + "…";
return re;
}
// "This is a short string".truncate();
"This is a short string"
// "Thisstringismuchlongerthan25characters".truncate();
"Thisstringismuchlongerthan25characters"
// "This string is much longer than 25 characters and has spaces".truncate();
"This string is much longer…"
Оно: