2010-10-26 37 views
2

我刚刚写了一个limitChars()函数。这个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特定功能,随时可以)。

+0

函数做了什么? – Anurag 2010-10-26 07:02:35

+0

为什么要用jQuery来设置简单的限制字符函数。你应该真的考虑香草的JavaScript :) – Sarfraz 2010-10-26 07:02:51

+0

@Sarraz我需要* trim *(*)的实现。也可以使用jQuery,因为它已经在我的环境中了。 – alex 2010-10-26 07:05:54

回答

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较长的一部分。另一个三元运营商的时间!

0

我们可以简单地做右下

function ShortentText(text, limit) { 

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

}

+0

我的意思是说,不切除我的任何功能:)我也认为在切断后最终的字符将是额外的。另外,不妨使用Unicode省略号。 – alex 2010-10-26 07:06:38

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

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

+0

感谢您的回答。不过,JavaScript [不允许](http://jsbin.com/ujaro)这样的默认参数。我确实为'preserveWord'提供了默认参数 - endChar的省略号和* falsy *值('undefined')。我也试图避免重新计算每次迭代的“长度”。 – alex 2010-10-26 09:32:22

+0

哦,谢谢,我没有意识到这一点。 – Aspelund 2010-10-26 13:08:17

相关问题