【问题标题】:How to truncate a list item [closed]如何截断列表项[关闭]
【发布时间】:2018-02-16 01:49:13
【问题描述】:

如何截断内联显示的列表项。 这是列表的一个示例。

<ul>
    <li>Some text1</li>
    <li>Some text2</li>
    <li>Some text3</li>
    <li>Some text4</li>
    <li>Some text5</li>
  <li>Some text6</li>
</ul>

要完全内联显示,列表中的项目数必须最大为 4。如果列表中的项目超过 4,则应用截断。 因此如果列表中只有 4 项,则显示为

Some text1 Some text2 Some text3 Some text4

但是如果有超过 4 个,比如上面的例子,列表中有 6 个项目。就是这样显示的

Some text1 ...  Some text5 Some text6

这样,项目 2、3,4 就被隐藏了。只有单击它们才会显示并完全显示。

【问题讨论】:

  • “有可能吗?”是的。到目前为止,您尝试过什么?
  • 有可能,逻辑是识别你想要隐藏的项目(可能给它们添加一个类)并通过jquery隐藏它们。您可以轻松地单独找到每个任务的代码示例。如果您遇到困难,请继续努力,人们会帮助您填补空白。
  • 你以哪种方式使用 jQuery?你能显示你的JS代码吗?还是您的意思是“仅在单击时才显示它们。有可能吗?”,这些项目隐藏在控制台中?请添加更多信息以帮助您。
  • 我还在考虑如何实现,是否需要脚本。尽可能我想要纯CSS。如果涉及截断列表项的文本内容,我知道如何截断。我只需要 white-space:no-wrap;溢出:隐藏;文本溢出:省略号。但在这种情况下,我想 oj 使用 jquery 可能是因为 onclick 显示。 L
  • 纯 css 会很困难,因为你想隐藏其他元素之间的随机数量的元素,而不是基于总长度的最后元素(你可以通过溢出和文本溢出)。

标签: jquery html css


【解决方案1】:

当然可以通过结合使用 CSS 和 JavaScript 来实现这一点。您要做的是限制显示的项目数,然后使用modulo 检查哪些元素应该被截断为省略号。

这可以在以下使用 jQuery 的示例中看到:

$(document).ready(function() {
  var maxToShow = 3; // Number of links to show

  $("ul li").each(function(i, e) {
    if (maxToShow % i - 1) { // Truncate to ellipsis
      $(e).html('...');
    }
    if (i >= maxToShow) {
      $(e).hide(); // Hide additional items
    }
  });
});
ul {
  padding: 0; /* Offset the default 40px <ul> padding */
}

li {
  display: inline-block; /* Display the elements inline */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul>
  <li>Some text1</li>
  <li>Some text2</li>
  <li>Some text3</li>
  <li>Some text4</li>
  <li>Some text5</li>
  <li>Some text6</li>
</ul>

但是,请注意,内联显示列表项会破坏使用列表项的目的,您最好使用 &lt;span&gt; 或类似的。


编辑:

要特别在开头显示一个,在结尾显示两个,最好从截断中简单地排除第一个 n 和最后一个 n 元素。这可以在下面看到:

$(document).ready(function() {
  // Number to show
  var showAtStart = 1;
  var showAtEnd = 2;

  // Truncate to ellipsis
  for (var i = 0; i < $("ul li").length; i++) {
    if (i > showAtStart - 1 && i < $("ul li").length - showAtEnd) {
      $($("ul li")[i]).html('...');
    }
  }

});
ul {
  padding: 0; /* Offset the default 40px <ul> padding */
}

li {
  display: inline-block; /* Display the elements inline */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul>
  <li>Some text1</li>
  <li>Some text2</li>
  <li>Some text3</li>
  <li>Some text4</li>
  <li>Some text5</li>
  <li>Some text6</li>
</ul>

【讨论】:

  • 我会尝试检查您的建议,并比较如何在我的情况下申请。我需要显示第一个孩子和最后两个孩子。所以也许我需要应用迭代。我会检查的。
  • @anni - 我已经编辑了我的答案以展示您如何做到这一点,并且还可以轻松更改起点和终点。无论有多少元素,这都会起作用:)
  • 您的建议看起来不错。无论如何,我仍然需要检查。
  • 它可以工作,就我而言,即使我的样式有额外的类名。在涉及截断之前,我有一个案例,如果我添加了类名,它就不起作用。但是您的解决方案非常好,谢谢!
  • 哦,我刚刚注意到您的解决方案无法单击以显示截断的列表项,它纯粹是截断。
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多