如何用jquery修剪这样的文本?

时间:2013-05-18 10:51:58

标签: javascript jquery string trim

我有一堆标题文本生成它们都有不同.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

来做到这一点

感谢任何形式的帮助或任何有关如何实现这一目标的提示。

3 个答案:

答案 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. 

> jsFiddle demo

值得注意的是,您可以使用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;
}