Ellipsis in the middle of a text (Mac style)

后端 未结 15 2289
长情又很酷
长情又很酷 2020-11-29 03:04

I need to implement ellipsis (\"...\") in the middle of a text within a resizable element. Here is what it might look like. So,

\"Lorem ipsum do         


        
15条回答
  •  余生分开走
    2020-11-29 03:26

    The following Javascript function will do a middle truncation, like OS X:

    function smartTrim(string, maxLength) {
        if (!string) return string;
        if (maxLength < 1) return string;
        if (string.length <= maxLength) return string;
        if (maxLength == 1) return string.substring(0,1) + '...';
    
        var midpoint = Math.ceil(string.length / 2);
        var toremove = string.length - maxLength;
        var lstrip = Math.ceil(toremove/2);
        var rstrip = toremove - lstrip;
        return string.substring(0, midpoint-lstrip) + '...' 
        + string.substring(midpoint+rstrip);
    }       
    

    It will replace characters in the middle with ellipsis. My unit tests show:

    var s = '1234567890';
    assertEquals(smartTrim(s, -1), '1234567890');
    assertEquals(smartTrim(s, 0), '1234567890');
    assertEquals(smartTrim(s, 1), '1...');
    assertEquals(smartTrim(s, 2), '1...0');
    assertEquals(smartTrim(s, 3), '1...90');
    assertEquals(smartTrim(s, 4), '12...90');
    assertEquals(smartTrim(s, 5), '12...890');
    assertEquals(smartTrim(s, 6), '123...890');
    assertEquals(smartTrim(s, 7), '123...7890');
    assertEquals(smartTrim(s, 8), '1234...7890');
    assertEquals(smartTrim(s, 9), '1234...67890');
    assertEquals(smartTrim(s, 10), '1234567890');
    assertEquals(smartTrim(s, 11), '1234567890');
    

提交回复
热议问题