【问题标题】:Trim the total character value of title and excerpt combined修剪标题和摘录组合的总字符值
【发布时间】:2019-10-25 11:05:08
【问题描述】:

我想修剪帖子标题和摘录的组合添加字符值。

目前我可以独立完成这两项工作 - 通过主题设置的摘录和通过 JS 的帖子标题。

但是,标题长度变化很大,以至于每个帖子预览的高度变化很大,看起来很凌乱。

有没有办法在标题和摘录中添加总字符数,然后修剪 - 最终结果是标题较长的帖子显示的摘录部分较短,最多 100 个字符总作为起点。

标题的目标是:

.t-entry-title a

以及带有

的摘录
.t-entry-excerpt

在过去,我设法用它来修剪我的标题

$(".t-entry-title a").each (function () {
  if ($(this).text().length > 50)
    $(this).text($(this).text().substring(0,50) + '...');
});

但我不知道如何保留完整的标题长度,然后计算剩下的 100(总字符)减去标题,然后将剩余的字符分配给帖子摘录。

提前致谢。

编辑 -

我通常会修剪长标题,但在这种情况下,客户特别不希望修剪标题,不幸的是它们的长度差异很大。

他们不太担心摘录的修剪,因此希望仅在有可用字符时才显示。

有些标题很短 - 例如 2 个单词,因此需要摘录来平衡高度 - 无论是用作轮播还是用作网格时

【问题讨论】:

  • 添加输入和输出的示例。
  • 我不知道你的意思,我用的是上面的JS,它在标题中输出50个字符,但我不知道如何添加摘录值。
  • 您可以在 css 中签出 text-overflow 属性,w3schools.com/cssref/css3_pr_text-overflow.asp
  • 只有在标题长度 > 50 时才可以添加该 css 属性,然后它会显示 t-entry-excerpt...

标签: javascript jquery character-trimming


【解决方案1】:

如果您的 HTML 结构如下:

<div class="t-entry">
    <div class="t-entry-title">
        <a>This is a short title</a>
    </div>
    <div class="t-entry-excerpt">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    </div>
</div>
<div class="t-entry">
    <div class="t-entry-title">
        <a>This is a very very very very very very very very long title</a>
    </div>
    <div class="t-entry-excerpt">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    </div>
</div>

然后在javascript中你可以这样做:

//Max number of characters to be printed for each entry
const maxchar = 100;

//Iterates each entry
document.querySelectorAll(".t-entry").forEach(function(entry){
    var title = entry.querySelector(".t-entry-title>a");
    var excerpt = entry.querySelector(".t-entry-excerpt>p");
    var length = Math.min(title.innerText.length,maxchar);
    //Truncates title and excerpt text up to maxchar
    title.innerText = title.innerText.substring(0,maxchar);
    excerpt.innerText = excerpt.innerText.substring(0,maxchar-length);
});

【讨论】:

  • 这是完美的。非常感谢。这不是我第一次想要这样的功能来平衡帖子,以及对于我当前的网站,我肯定会在未来重新使用它。谢谢!
【解决方案2】:

是否有理由不使用 CSS 样式来修剪长字符串以适应其容器,而不是尝试操作字符串?

例如,如果“标题”&lt;a&gt; 元素应用了此类/样式...

.t-entry-title a {
  display: inline-block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

...我认为内容会根据您的页面元素允许的间距进行调整(当然,如果不查看页面的其余部分就很难知道)。

【讨论】:

  • 您好。我通常会修剪长标题,但在这种情况下,客户特别不希望修剪标题,不幸的是长度差异很大。他们不太担心摘录的修剪,因此希望仅在有可用字符时才显示它。有些标题很短 - 例如 2 个单词,因此需要摘录来平衡高度 - 无论是用作旋转木马还是用作网格时,我希望这会有所帮助 - 我已将此添加到我的原始问题中
  • 好的,那么仅在摘录上使用这种样式怎么样?
  • 很抱歉,但我看不出这与按字符修剪摘录有何不同?我可以修剪摘录框的高度,但我真正需要的是根据标题的高度来改变高度。我需要类似 -webkit-box-orient: vertical;和 webkit-line-clamp;但适用于整个帖子(例如,夹住 5 行可以由标题和摘录组成的行,标题优先)
  • 如果您可以更新您的问题以包含带有问题数据的 html 示例,那么向您展示我的想法会更容易......
  • 嘿@steveR - 谢谢你的帮助。最后,上面的 JS 解决方案完美运行,所以我给予了赏金。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
相关资源
最近更新 更多