2010-10-26 95 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