如何使文本溢出省略号在多行文本上工作
How to make text-overflow ellipsis work on multi-line text?
我如何使text-overflow: ellipsis
工作在多行文本不应用white-space: nowrap
,与纯javascript,不包括任何jQuery库和不指定行数?
我对此进行了大量搜索,但我找不到任何简单而纯粹的Javascript解决方案。所以我自己做了一个:
function ellipsis(el){
var elheight = el.offsetHeight;
var eltxt = el.innerHTML;
while (elheight < el.scrollHeight){
eltxt = eltxt.substring(0, eltxt.length - 1);
el.innerHTML = eltxt + '...';
}
}
elheight
包含盒子的实际高度(使用offsetHeight
)
scrollHeight
给出了框内内容的高度(包括溢出的文本)
此函数将盒子的内容存储在eltxt
中,然后继续检查盒子的实际大小是否仍然小于其内容,每次从eltxt
中删除1个字符,并用eltxt
的新值加上三个点替换元素的内容。
它作用于谷歌chrome 4 + ,即 8 + , Firefox 3 + , Safari 4 + ,,(我认为)所有歌剧版本。
这是非常简单和容易的,但我在谷歌上发现的是其他长jQuery库的函数,你需要提供你想要的行数,以便他们工作等。
编辑
然而,这个解决方案是NOT完全等同于text-overflow: ellipsis
,因为它没有隐藏额外的文本,而是删除了它。所以如果你的盒子有一些动画,它的尺寸应该改变(例如变宽),那么你的文本将不会像原来那样重新出现。在这种情况下,我建议将框的文本存储在函数之外然后在每次框的尺寸发生变化时运行该函数通过将框的文本作为第二个参数:
var myElementsText = myElement.innerHTML;
function ellipsis(el, txt){
var elheight = el.offsetHeight;
var eltxt = txt;
while (elheight < el.scrollHeight){
eltxt = eltxt.substring(0, eltxt.length - 1);
el.innerHTML = eltxt + '...';
}
}
function changeSize(el){
el.ClassName = 'new_class_with_different_dimensions';
function ellipsis(el, myElementsText);
}
现在如果你运行
changeSize(myElement);
这个方框将有原来的文本和新的省略号。
相关文章:
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- 为什么文本对齐:对;工作不正常
- IE8更改文本区域上的事件侦听器不工作
- Alloy UI文本区域工作不正常
- 提交按钮只能在onchange调用输入文本后第二次点击时工作
- Cufon..简单渐变文本..是't工作
- 无法使我的文本参数与我的查询一起工作
- 我的剧本赢了'不能在IE中工作(甚至9)?修改复制文本的简单javascript
- fabric.js中的文本对齐方式未按预期工作
- 预览文本区域分区不工作
- Javascript/Php聊天-输入is'不能在一个文本框中工作
- 使用jQuery在焦点上选择文本框是't在移动浏览器中工作
- 阻止选择在IE中工作但不在Chrome中工作的文本
- 我正在用来自选择的数据填充文本框,它可以工作,但是
- 如果文本在高图表中较多,则工具提示无法正常工作
- 将公司名称绑定到更新面板中的下拉列表,自动完成文本框工作,但每次页面刷新时
- 文本区域最大长度属性无法在所有浏览器中正常工作
- 如何在表单文本框中启用退格工作
- .text 未获取所有文本,但在控制台中工作