javascript - 如何将 <td> 限制为只有三行?

标签 javascript jquery html css django

我想在我的所有表格行中实现统一的外观。 当您查看我下面的示例时,您会发现中间的注释超过 4 行,这不是很漂亮。

enter image description here

我希望限制所有 <td>到 3 行。

如果要显示的内容多于三行,则应使用... [click for more] 剪切内容。并将内容放入 collapseable element 中, 这样当点击它时它会显示全部内容。

后者应该不是问题,但我如何将内容限制为只有三行?要我算字数再决定吗?有更好的策略吗?顺便说一句,我正在使用 Django,但我很乐意使用 javascript、jquery 或任何 css 魔法来解决这个问题。

更新:

接受的答案非常好。然而,它带有一个警告,这并不容易解决。 如果你有邻居 td已经超过三行,而当前的 td 只有两行,我们将得到一个无限的 while 循环。

enter image description here

while($(this).innerHeight() / $(this).css('line-height').slice(0,-2) >= 3){ .. }

$(this).innerHeight()不能减少,因为相邻的单元格保持高度很高。我认为如果有可能获取当前 td 的 css 并将其完全复制到一个单独的字段中的内容中,相邻的 tds 不会干扰,我们将获得最佳解决方案。

更新 2:

正如阿萨德所说,解决方案是在 td 的内容周围放置一个 div 包装器并在 div 上设置类(class)在td里面而不是在 td 上本身。它运行完美。

最佳答案

假设您使用的是 jQuery,您可以使用以下方法找到所有超过特定行数的 td 元素:

$('td').filter(function(){
    return $(this).innerHeight() / $(this).css('line-height').slice(0,-2) > 3; //more than 3 lines
});

然后您可以将可折叠元素应用于这些 td 元素。

这是一个演示(使用段落而不是tds):http://jsfiddle.net/jM4ZY/1/

这是一个将内容 chop 以适合 3 行,然后添加更多按钮的示例:http://jsfiddle.net/jM4ZY/2/

就编辑而言,这很容易通过为您的内容使用内部包装器来解决;可能是 div 元素。然后,您可以测量该元素的高度,它与相邻单元格的高度无关。

关于javascript - 如何将 <td> 限制为只有三行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13681615/

相关文章:

javascript - Accordion 子菜单不会向下滑动

html - 为什么常规样式会覆盖文本阴影的移动样式

javascript - 将数组键推送到自己的数组

javascript - 为什么 JavaScript 使用术语 "Number"而不是 "Integer"?

javascript - 在 angularjs 和 typescript 中绑定(bind)

javascript - 使用 prev 和 next 动画 CSS3 旋转 onclick

jquery - 缩放 Div/iframe 内的文本大小

javascript - 如何用canvas渐变绘制矩阵?

javascript - Jquery:如何在ajax中添加重复数据

javascript - 如何返回 not found in filter function in jQuery?