javascript - 显示截断字符串的显示值
问题描述
我想做的事
我希望能够计算出在截断之前显示了多少字符串。
为什么我想做
我有一个项目清单。您可以从此列表中选择任意数量的项目。我有一个面板元素,显示所选项目名称的逗号分隔字符串。如果字符串太长,它应该被截断并显示被截断隐藏的任何其他选定项目的 +{number} 值。
基本示例
https://stackblitz.com/edit/angular-ivy-cbyemy
上面的 stackblitz 展示了一个基本的用例示例。
当前面板标题:
一个项目,另一个项目,一些... +6
期望的结果:
一个项目,另一个项目,一些... +3
我试过的
- 使用element.innerHTML和element.innerText读取显示的字符串。两者都显示完整的字符串,而不是显示的截断字符串。
解决方案
从这里借了一个答案,并根据要求对其进行了一些修改。
您的分叉堆栈闪电战,在这里更新了工作演示。
您可以从此函数获取可见字符的计数 -
countVisibleCharacters(element): number {
var text = element.firstChild.nodeValue;
var count = 0;
element.removeChild(element.firstChild);
for (var i = 0; i < text.length; i++) {
var newNode = document.createElement('span');
newNode.appendChild(document.createTextNode(text.charAt(i)));
element.appendChild(newNode);
if (newNode.offsetLeft < element.offsetWidth) {
count++;
}
}
return count;
}
然后你可以通过这种方式获得后缀 -
getTitleSuffix(): void {
let element = document.getElementById('title');
let count = this.countVisibleCharacters(element);
let substr = element.textContent;
substr = substr.substring(count - 1);
this.titleSuffix = substr.split(',').length;
}
推荐阅读
- cors - Laravel Homestead 可通过 Internet 和 CORS 问题访问
- mysql - 按 200 行分组,从最新的 ID 开始
- spring-boot - 在高负载期间处理 Spring 上下文刷新
- linux - QEMU/KVM/libvirt macvtap VEPA 不工作 - ARP 请求不转发
- python - 用列中的值替换子字符串 - 第 2 部分
- firebase - 我应该使用什么事件来跟踪用户多久没有打开我的应用程序?
- php - 为什么 ORM 不给我发回对象?
- magento - 自定义模板未加载
- django - 如何正确管理 django 模型关系?
- xml - 如何从两个 XML 中获取所有 ID 并使用 XSL 合并到一个 XML