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

Javascript 什么';截断可能包含或不包含HTML元素的段落文本的最快方法是什么?,javascript,jquery,Javascript,Jquery,我需要截断可能包含或不包含HTML标记的段落文本。我正在寻找通过直接jQuery或香草javascript实现这一点的最有效方法。您可以在这里看到问题: var text=“这是一些带有链接的文本”; var shortText=jQuery.trim(title).substring(0,10).split(“”).slice(0,-1).join(“”+“…”; 警报(短文本); 截断的文本将位于段落元素中,该元素可以动态展开以显示所有内容。在这种情况下,我不想剥离HTML标记,然后仅在完

我需要截断可能包含或不包含HTML标记的段落文本。我正在寻找通过直接jQuery或香草javascript实现这一点的最有效方法。您可以在这里看到问题:

var text=“这是一些带有链接的文本”;
var shortText=jQuery.trim(title).substring(0,10).split(“”).slice(0,-1).join(“”+“…”;
警报(短文本);

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

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

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

var title = $('<div>').html(text).text();
var title=$('').html(text.text();
这是一些带有链接的文本
变为
这是一些带有链接的文本
,可以安全地截断

如果您需要再次将其扩展到原始文本,只需保留一个HTML仍在其中的副本


下面是一个例子:

如果这是为了在页面上显示,一个更简洁的方法可能是使用CSS。给定HTML:

    <span class="truncated">this is truncated text</span>
这将显示类似以下内容:

    this is...

然后,您可以在需要时使用JavaScript删除CSS类。示例实现:

我使用regex解决了这个问题。在这里找到了示例:

var text=$(“#我的文本”);
var-maxWords=25;

var words=text.html().match(/如果HTML被删除可以吗?不可以,因为当段落展开时它需要在那里。JSFIDLE中有一个错误。将
title
更改为
text
很好。我也为问题添加了更多信息。为什么不制作一个包装器元素并更改其高度?如果它切断了中间部分,效果如何复杂HTML标记的数量?@Corion这是一种视觉效果,因此它将在给定的宽度处停止内容并附加省略号-无论当时有什么格式。@Bjork24给出的示例是一小段文本,因此我认为这是一个合适的解决方案。我从一个在Firefox上工作的实现中获取了这段代码,因此我将仔细检查,看看我可能错过了什么。这在我使用的Firefox版本21.0中起作用。我最近也在一个(我想)实时网站上使用了它已测试回IE8,可能是IE7。正如我在添加到问题中的编辑中提到的,我需要在折叠和扩展版本中维护相同的HTML。您似乎回答了与最初询问的问题不同的问题。此外,如果单词由标签indi包装,您的解决方案仅正确计算单词数在一组人的周围设置一个跨度,它把跨度看成是一个单词。当你有中间的桌子时,这仍然会中断:(Adrian是对的,嵌套在彼此之间的任何元素都不会被计数,例如列出了
li
s的
ul
ol
,不幸的是不会被计数。
    .truncated {
        overflow: hidden;
        display: block;
        width: 50px;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    this is...
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(" ") + " ...");