javascript - 使用 truncate.js chop 多行 html 文本

标签 javascript truncate truncation

我发现了一个很棒的 html chop 库,truncate.js ,它可以处理我大约 99% 的需求。但我面临一个棘手的问题。我有一个要求,要求将“显示更多”放在一系列帖子的特定行数的末尾……这个库设法实现了一段文本……但是当涉及到多行文本显示时more 没有正确定位。

我做了一个plunker来证明这个问题。我想要的只是能够将 show more 放置在多行文本的相同位置,就像在同一页面上的文本 block 的显示方式一样。

我的第一个尝试是在 truncateNestedNodeEnd 函数中添加 prev()

if ($clipNode.length) {
        if ($.inArray(element.tagName.toLowerCase(), BLOCK_TAGS) >= 0) {
            // Certain elements like <li> should not be appended to.
            $element.after($clipNode);
        }
        else
            {
            //edited this line to add prev()
            //$element.append($clipNode)
            $element.prev().append($clipNode);

            }
       }`

enter image description here

这给了我想要的多行文本,但它随后破坏了文本 block 的原始功能,如 plunker 中所示。我怎样才能让这个功能适用于这两种情况。当这两个帖子位于同一页面时,我仍然希望显示更多以显示在黄色部分。

最佳答案

问题是 truncate.js 递归地将 $clipNode 放在不同的容器中,如果 chop 标志不为真则将其删除。您的方法的问题是您附加到元素的前一个节点,这在列出的项目的情况下是正确的,但在没有上一个项目的情况下不是真的(如文本 block 的情况)。这就是为什么在您的方法中它没有在文本 block 中插入任何内容。我已按如下方式更改代码并在函数末尾添加了另一个附加语句,以便在完成附加 $clipNode 后,它会将 $clipNode 容器移动到前一个元素(如果有的话)。

if ($clipNode.length) {
  if ($.inArray(element.tagName.toLowerCase(), BLOCK_TAGS) >= 0) {
    // Certain elements like <li> should not be appended to.
    $element.after($clipNode);
  } else {
    //edited this line to add prev()
    //$element.append($clipNode)
    $element.append($clipNode);

  }
}

if ($rootNode.height() > options.maxHeight) {
  if (child.nodeType === 3) { // text node
    truncated = truncateTextContent($child, $rootNode,
      $clipNode, options);
  } else {

    truncated = truncateNestedNode($child, $rootNode, $clipNode,
      options);
  }
}

if (!truncated && $clipNode.length) {
  $clipNode.remove();
} else {
  $element.prev().append($clipNode);
}

问题好像解决了

enter image description here

另请参阅 Plunker 中的更新代码

关于javascript - 使用 truncate.js chop 多行 html 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45944780/

相关文章:

javascript - text_field_tag 中的 Rails javascript

mysql - 如何截断 MySQL 数据库中的所有数据?

c++ - C++中缩小和截断之间的区别?

Java:MySQL 数据截断:不正确的双值:列的 ''

javascript - 使用javascript动态计算顶级属性

javascript - 根据另一个 div 显示隐藏一个 div

javascript - 从对象调用函数

javascript - chop 标签 : find out when text overflows a 2-row 400px-long label

mysql - 如何重写我的 MySQL 更新语句以消除 "Truncated incorrect INTEGER value"警告?

java - 如何检查字符是否为元音?