截断javascript中不包括html元素的文本

truncating text in javascript excluding html elements

本文关键字:元素 文本 html 不包括 javascript 截断      更新时间:2023-09-26

我使用以下函数截断旁边有"read more"按钮的文本。

truncateText: function (string, targetCharacterLength) {
    var length = string.length;
    if (length < targetCharacterLength) {
        return (string)
    } else {
        var shortenedString = string.slice(0, targetCharacterLength);
        shortenedString = shortenedString.slice(0,shortenedString.lastIndexOf(' ')) + '... ';
        return shortenedString
    }
}

所以我遇到的问题是文本中的< a >标记。如果它在"read more"按钮之前启动,则该按钮的功能将中断。

这是当我检查文本上< a >标签在"..." 之前开始的元素时看到的

< a... < a="" href="#" class="more" > Read More < /a...>

有人知道我该怎么解决这个问题吗?我不能使用插件。

感谢

您必须在输入字符串中找到锚块的</a>的最后一个索引。您可以使用.lastIndexOf()JavaScriptApi来完成此操作。

试试FIDDLE,这里我给出了一个带有锚标记的文本。代码找到了标记体</a>的末尾。

这是一个粗略的例子,所以我认为需要对使用/a>以外的字符串进行审查。

我已经更新了如下的功能

function truncateText(string, targetCharacterLength) {
    var length = string.length;
    if (length < targetCharacterLength) {
      return (string)
    } else {
      var shortenedString = string.slice(0, targetCharacterLength);
      var tempshortenedString = shortenedString.slice(0, shortenedString.lastIndexOf(' '));
      var lastMarkupBegin = -1;
      var lastMarkupEnds = -1;
      try { 
        lastMarkupBegin = tempshortenedString.lastIndexOf("<a");
        lastMarkupEnds = tempshortenedString.lastIndexOf("/a>");
      } catch (err) {}
      //alert(lastMarkupEnds);
      if (lastMarkupBegin != -1) { // has an opening anchor tag
        if (lastMarkupEnds == -1) { // not having an closing tag
          tempshortenedString = tempshortenedString.slice(0, lastMarkupBegin);
          //alert(tempshortenedString);
          return tempshortenedString + '... ';
        }
      }
      return shortenedString + '... '
    }

希望它对你有效