我有一堆标题文本生成它们都有不同.Length但是在字符串的特定startindex我想找到最近的空格然后删除它后面的文本以及空格,然后添加“ ......“。
最重要的部分是它不应该延长49长度
示例:
"What can UK learn from Spanish high speed rail when its crap"
我想确保它变为:
"What can UK learn from Spanish high speed rail..."
如何使用Jquery执行此操作?
我有一个C#代码可以实现这个目标:
public static string TrimLength(string text, int maxLength)
{
if (text.Length > maxLength)
{
maxLength -= "...".Length;
maxLength = text.Length < maxLength ? text.Length : maxLength;
bool isLastSpace = text[maxLength] == ' ';
string part = text.Substring(0, maxLength);
if (isLastSpace)
return part + "...";
int lastSpaceIndexBeforeMax = part.LastIndexOf(' ');
if (lastSpaceIndexBeforeMax == -1)
return part + "...";
else
return text.Substring(0, lastSpaceIndexBeforeMax) + "...";
}
else
return text;
}
但我不知道如何用jquery
来做到这一点感谢任何形式的帮助或任何有关如何实现这一目标的提示。
答案 0 :(得分:4)
这是这个常见任务的一般Javascript解决方案。 jQuery不是必需的,但用于$.trim
以保持输入字符串整洁。
var ellipsis = "...";
function TrimLength(text, maxLength)
{
text = $.trim(text);
if (text.length > maxLength)
{
text = text.substring(0, maxLength - ellipsis.length)
return text.substring(0, text.lastIndexOf(" ")) + ellipsis;
}
else
return text;
}
并测试:
sentence = "The quick brown fox jumps over a lazy dog.";
for (var i = 10; i <= 50; i += 10){
console.log(TrimLength(sentence, i));
};
输出:
The...
The quick brown...
The quick brown fox jumps...
The quick brown fox jumps over a...
The quick brown fox jumps over a lazy dog.
值得注意的是,您可以使用CSS text-overflow
获得类似效果,这可能更适合您的情况:http://jsfiddle.net/LtQ2j/3/
答案 1 :(得分:2)
0,我猜你误解了jQuery的目的(只读了第一段:“什么是jQuery?”)。 jQuery是一个构建在javascript之上的框架,用于在浏览器中操作DOM。根据您的需要,您只需要一个简单的javascript表达式:
function trimToLen(str, maxLen) {
var trimmed = str.substr(0, maxLen);
return trimmed.substr(0, trimmed.lastIndexOf(' ')) + '…';
}
使其适用于短于maxLex
的字符串,您必须添加其他条件:
function trimToLen(str, maxLen) {
if (str.length <= maxLen) {
return str;
}
var trimmed = str.substr(0, maxLen);
return trimmed.substr(0, trimmed.lastIndexOf(' ')) + '…';
}
现在的例子:
trimToLen("too short", 15);
// returns: too short
trimToLen("equal to maxLen", 15);
// returns: equal to maxLen
trimToLen("a little more than maxLen", 15);
// returns: a little more…
请注意,我使用…
(省略号)代替...
(3 x点)。在视觉上它几乎是相同的,但你保存了几个字符,并避免使用修剪文本的长度使逻辑复杂化(因为你有3而不是1个字符)。
您可能想要的另一件事是规范化空格以捕捉制表符,新行或空格。当您想要在一个简短<a>
或<span>
标记中显示更长的描述(包含格式化文本)时,可能就是这种情况。为此,您可以使用简单的正则表达式作为函数中的第一个表达式:
str = str.replace(/\s/g, ' ');
答案 2 :(得分:0)
为了完整起见,您可以使用lastIndexOf
的2-arg形式做得更好:
var ellipsis = "...";
function Truncate(text, maxLength)
{
if (text.length <= maxLength)
return text;
maxLength -= ellipsis.length;
var space = text.lastIndexOf(" ", maxLength);
if (space >= 0)
maxLength = space;
return text.slice(0, maxLength) + ellipsis;
}