计算DIV中可容纳的字符数
count how many characters fit in a DIV
我的页面上有一个div(这是一个响应式设计),它只包含设置pt大小的文本。文本很合适,页面看起来很大气。
然而,当浏览器缩小时,DIV会缩小,我的一些文本会从DIV中弹出
有没有某种JavaScript(jQuery)公式可以计算DIV中可以容纳多少个字符?我的想法是,每次浏览器更改大小时,文本都会被截断,并在末尾添加省略号。我只是不知道在哪里截断它。
感谢
你尝试过css吗?
div.resizable {
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
计算字符的空间需求将产生一个庞大的原始数据表。用户代理、字体系列/大小/重量/种类和符号是需要考虑的维度。
我认为从实时上下文中收集数据并不容易,尽管嵌入一个svg元素和一个包含html数据的foreignObject节点可能是一个可行的路径:文本可以复制到foreignObject
元素中,并使用getBBox
方法来提供所要求的空间。
警告:后一个想法是从我病态的头脑中产生的,我还没有实施这样的计划。
它将有助于显示要显示的段落行数。
代码
.text{
溢出:隐藏;
文本溢出:省略号;
显示:-webkit框;
-webkit线夹:2;/*要显示的行数*/
-webkit长方体方向:垂直;
}
这取决于您是否需要能够支持div中的多行,是否需要在末尾使用省略号(或其他东西),以及是否需要打断单词bounddry。
对于单线解决方案,以及如果您不想要省略号的多线解决方案:
.resizable {
overflow-x: hidden;
}
对于带有省略号的单行解决方案:
.resizable {
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
对于结尾有(something)的多行解决方案,我不打算发布代码,但逻辑是这样的:将您的div封装在另一个div中(称为内部和外部)。使用以下CSS:
.outer{overflow:hidden;}
.inner{width:100%;}
.extra{display:none;}
然后捕获浏览器调整大小事件,然后从页面中删除省略号类$('.ellipsis').remove();
的所有内容,对于每个.extra
,获取文本并将其附加到其父级(.interner),然后删除所有额外的类。然后遍历所有外部类,并将其高度与包含内部类的高度进行比较。如果内部div大于外部div,则需要应用省略号。将省略号代码附加到内部div,如$('.inner').append('<span class="ellipsis">...</span><span class="extra"><span>')
。然后进入循环,直到内部div等于或小于外部div的高度,执行以下操作:删除.ellipsis
之前内部div中的最后一个(字符|单词),并将其预附加到.extra
跨度。
网络上还有另一个仅支持CSS的解决方案,如果你不介意单词会在中间被截断,省略号总是出现在内部div的右下角,但你需要在谷歌上搜索,在这里转发会很长时间。
您可以通过使用文本溢出属性,使用直接css3来修复此问题。
听起来您想要的是text-overflow: ellipsis;
如果您需要支持不能处理text-overflow: ellipsis
的旧浏览器,那么我建议您使用这样的插件。
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- 相互匹配多个可选字符
- 谷歌可视化数据分组字符串列
- 使用CSS显示所有字符的内容可编辑单行
- 创建一个可链接的函数,用于规范化一小组特殊字符
- JavaScript Table 使用可排序对重音字符进行排序
- 如何创建一个可由html/javascript识别的新Web字符符号
- 如何将 base64 编码的字符串格式化为 x 个字符的可 jslinable 行
- 为什么在正则表达式字符可选时找不到匹配项
- 正则表达式 x(?!n) 在 x 选择器中使用可选字符
- 窗口中可容纳多少个单位,并将该值推送到数组中
- 可编辑内容更改字符之间的样式
- 计算DIV中可容纳的字符数
- 使用(或不使用)rangy替换动态可编辑的内容字符
- JQuery UI可拖动:超出一侧的容纳范围
- 替换子字符串和可选的后续字符
- javascript内容可编辑:将光标设置为字符偏移量
- 我如何计算屏幕上可以容纳多少个字符
- Javascript正则表达式可选字符
- Rxjs - switchMap到http将可观察的字符从热转换为冷