谁有一个方便的方法来截断一个字符串在中间?类似于:
truncate ('abcdefghi', 8);
会导致
'abc...hi'
更新:更完整一点
kcrjzv8t1#
这里有一种方法,用substr将字符串切碎:
substr
var truncate = function (fullStr, strLen, separator) { if (fullStr.length <= strLen) return fullStr; separator = separator || '...'; var sepLen = separator.length, charsToShow = strLen - sepLen, frontChars = Math.ceil(charsToShow/2), backChars = Math.floor(charsToShow/2); return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars); };
See example →
kd3sttzy2#
像这样的事。。
function truncate(text, startChars, endChars, maxLength) { if (text.length > maxLength) { var start = text.substring(0, startChars); var end = text.substring(text.length - endChars, text.length); while ((start.length + end.length) < maxLength) { start = start + '.'; } return start + end; } return text; } alert(truncate('abcdefghi',2,2,8));
或者限制为真正的省略号:
function truncate(text, startChars, endChars, maxLength) { if (text.length > maxLength) { var start = text.substring(0, startChars); var end = text.substring(text.length - endChars, text.length); return start + '...' + end; } return text; } alert(truncate('abcdefghi',2,2,8));
jsFiddle
gk7wooem3#
这可能对你正在寻找的东西来说有点“沉重”,但有一个jQuery插件可以做这类事情。The "Three Dots" plugin
dl5txlt94#
基于mVChr's answer的CoffeeScript版本:
truncate = (str, length, separator = '...') -> return '' if str is null return str if str.length <= length pad = Math.round (length - separator.length) / 2 start = str.substr(0, pad) end = str.substr(str.length - pad) [start, separator, end].join('')
bis0qfac5#
通过依赖**@mvChr**解决方案,我建议将@pipe与Typescript一起使用。首先,你需要创建一个@pipe helper,在这里你将描述truncate的功能。
import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'truncateString', }) export class TreeHelperPipe implements PipeTransform { transform(fullStr: string, strLen: number, separator: string): any { if (fullStr.length < strLen) { return fullStr; } separator = separator || '...'; const sepLen = separator.length, charsToShow = strLen - sepLen, frontChars = Math.ceil(charsToShow / 2), backChars = Math.floor(charsToShow / 2); return ( fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars) ); } }
之后,您将能够在模板上使用@pipe helper,如下所示:
<span class="item-name" [text]="item.name | truncateString: 60" [title]="item.name" ></span>
我只将@管道应用于文本,而不应用于title属性(它在一个立交桥窗口中显示文本)。
whlutmcx6#
我是这样做的:
function truncate( fullStr, strLen = 8, separator = "...", frontChars = 3, backChars = 4 ) { if (fullStr.length <= strLen) return fullStr; return ( fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars) ); }
qzwqbdag7#
我个人认为这种方法很好用。
export function truncate(str: string, maxLength: number, location = 'middle') { if (str.length <= maxLength) { return str; } let partLength = Math.ceil((maxLength - 3) / 2); let startStr, endStr; switch (location) { case 'start': endStr = str.substring(str.length - maxLength + 3); return '...' + endStr; case 'end': startStr = str.substring(0, maxLength - 3); return startStr + '...'; case 'middle': default: startStr = str.substring(0, partLength); endStr = str.substring(str.length - partLength); return startStr + '...' + endStr; } } console.log(truncate('abcdefghi', 8, 'start')); // Output: '...defghi' console.log(truncate('abcdefghi', 8, 'end')); // Output: 'abcdef...' console.log(truncate('abcdefghi', 8)); // Output: 'abc...hi'
hrysbysz8#
如果你是在PHP中玩,你可以调用这个,工作正常,可以很好地调整到JS,我假设。
function middle_dots($crumb, $max=30){ if(strlen($crumb) > $max) $crumb = substr_replace($crumb, '...', $max/2, round(-$max/2)); return $crumb; } echo middle_dots('Some long text here would if longer than 30 chars get some ...');
尽情享受吧史蒂夫
8条答案
按热度按时间kcrjzv8t1#
这里有一种方法,用
substr
将字符串切碎:See example →
kd3sttzy2#
像这样的事。。
或者限制为真正的省略号:
jsFiddle
gk7wooem3#
这可能对你正在寻找的东西来说有点“沉重”,但有一个jQuery插件可以做这类事情。
The "Three Dots" plugin
dl5txlt94#
基于mVChr's answer的CoffeeScript版本:
bis0qfac5#
通过依赖**@mvChr**解决方案,我建议将@pipe与Typescript一起使用。
首先,你需要创建一个@pipe helper,在这里你将描述truncate的功能。
之后,您将能够在模板上使用@pipe helper,如下所示:
我只将@管道应用于文本,而不应用于title属性(它在一个立交桥窗口中显示文本)。
whlutmcx6#
我是这样做的:
qzwqbdag7#
我个人认为这种方法很好用。
hrysbysz8#
如果你是在PHP中玩,你可以调用这个,工作正常,可以很好地调整到JS,我假设。
尽情享受吧
史蒂夫