截断可能包含或不包含HTML元素的段落文本的最快捷方法是什么?

时间:2013-07-03 21:27:35

标签: javascript jquery

我需要截断可能包含或不包含HTML标记的段落文本。我正在寻找使用直接jQuery或vanilla javascript执行此操作的最有效方法。您可以在此处查看问题:http://jsfiddle.net/4BzpY/3/

var text = "This <a href=\"\">is</a> some text with a link";

var shortText = jQuery.trim(title).substring(0, 10).split(" ").slice(0, -1).join(" ") + "...";

alert(shortText );

截断的文本将位于可以动态展开以显示所有内容的段落元素中。在这种情况下,我不想剥离HTML标记,然后仅在完全展开时显示它们。 HTML应保持原样在折叠和展开状态。

3 个答案:

答案 0 :(得分:4)

如果要在页面上显示,则更简洁的方法可能是使用CSS。鉴于HTML:

    <span class="truncated">this is truncated text</span>

和CSS:

    .truncated {
        overflow: hidden;
        display: block;
        width: 50px;
        white-space: nowrap;
        text-overflow: ellipsis;
    }

这将显示类似于:

的内容
    this is...

然后,您可以在需要时使用JavaScript删除CSS类。示例实施:http://jsfiddle.net/a8QK4/

答案 1 :(得分:2)

我用正则表达式想出来了。在此处找到了示例:https://stackoverflow.com/a/7552371/142486

var text = $('#my-text');
var maxWords = 25;
var words = text.html().match(/<\s*(\w+\b)(?:(?!<\s*\/\s*\1\b)[\s\S])*<\s*\/\s*\1\s*>|\S+/g);
text.html(words.slice(0, maxWords).join(" ") + " ...");

在这里演示 - http://jsfiddle.net/3Yjm8/

我只需将未添加的HTML添加到data()的元素中,然后在展开框时替换它。

答案 2 :(得分:1)

这种情况的一种可能性是暂时将被截断的数据转换为文本。

将HTML发送到一次性元素,然后提取文本:

var title = $('<div>').html(text).text();

This <a href=\"\">is</a> some text with a link变为This is some text with a link,然后可以安全截断。

如果您需要再次将其扩展为原始文本,只需保留HTML中的副本。

以下是一个示例:http://jsfiddle.net/B2AZA/