这个limitChars功能可以改进吗?

时间:2010-10-26 06:58:58

标签: javascript jquery

我刚刚编写了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 个答案:

答案 0 :(得分:1)

由于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。是另一个三元运营商的时候了!

答案 1 :(得分:0)

我们可以简单地执行以下操作

 function ShortentText(text, limit) {

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

}

答案 2 :(得分:0)

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

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|| '…');
  }
}

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