代码之家  ›  专栏  ›  技术社区  ›  alex

这个limitChars功能可以改进吗?

  •  2
  • alex  · 技术社区  · 14 年前

    limitChars() 功能。

    var limitChars = function(str, limit, endChar, preserveWord) {
      str = $.trim(str);
      var strLength = str.length;
      if (strLength <= limit) {
        return str;
      }
    
      if (limit == 0) {
        return '';
      }
    
      endChar = endChar || '…';
    
      if (preserveWord && ! str.substr(limit, 1).match(/\s/)) {
        while ( limit < strLength && ! str.substr(limit, 1).match(/\s/)) {
          limit++;
        }
      }
    
       return $.trim(str.substr(0, limit)) + endChar;     
    }
    

    为了学习,我喜欢 post my solution 看看是否有人能改进它(我经常发现我忽略了一些东西,我们都学到了:)

    (哦,我用jQuery的 $.trim() ,但如果您想使用更多特定于jQuery的函数,请随意)。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Yi Jiang G-Man    14 年前

    自从 indexOf 接受可选的第二个参数 fromIndex ,我们可以实现这样的功能:

    function limitChars(str, limit, endChar, preserveWord) {
        str = $.trim(str);
        return (str.length > limit) ? str.substring(0, (preserveWord ? str.indexOf(' ', limit) : limit)) + (endChar || '…') : str;
    }
    

    编辑: 我刚刚意识到我错过了原始脚本的一部分 endChar limit . 是时候换一个三元运算符了!

        2
  •  0
  •   kobe    14 年前

    我们可以简单地做下面的事情

     function ShortentText(text, limit) {
    
    var temp;
    if (text.length - 1 > limit) {
        temp = text.substring(0, limit-3) + '...';
    }
    else {
        temp = text;
    }
    return temp;
    

        3
  •  0
  •   Aspelund    14 年前

    我不知道这是否是一个更好的解决方案,但这也会奏效:

    var limitChars = function(str, limit, endChar, preserveWord) {
      if($.trim(str).length<limit)
     return $.trim(str);
      else if(!preserveWord)
     return $.trim(str).substr(0,limit).concat(endChar||'…');
      else {
        var strArr = $.trim(str).split(" ");
        var i=-1;
        var retStr = "";
        while(i+1<strArr.length &&  retStr.concat(" ", strArr[i+1]).length < limit)
      retStr = retStr.concat(" ", strArr[++i]);
        return retStr.concat(endChar|| '…');
      }
    }
    

    另外,我将添加默认参数。