javascript - 如何将css工作中断规则中的句子转换为\ n字符串?
问题描述
<div style="width:30px;word-break:break-word">
some
</div>
<div>
</div>
<div style="width:10px;word-break:break-word">
words
</div>
<div style="width:50px;word-break:break-word">
wordswo大佬123words
</div>
div 框样式宽度中有一些单词。
这些单词由 css 分词规则包装。
有什么方法可以将它们转换为用 \n 分割的字符串,或者我们可以知道哪一行的字符?
在demo中,'some'应该是'so\nme','word'应该是'w\no\nr\nd\ns','wordswowords'应该是'words\nwo大\n佬\n 123w\nrds'
如果全是英文,那似乎很简单。但是对于中文,结果变得难以理解。
解决方案
一种可能的方法涉及“滚动范围”。你通过 textNode 移动它,检查它的高度变化的点。像这样:
function getWordsByLines(textNode) {
const words = [];
const textLength = textNode.data.length;
const range = textNode.parentNode.ownerDocument.createRange();
range.selectNodeContents(textNode);
let prevHeight = NaN;
let prevWord = '';
let rangeEnd = 0;
while (rangeEnd <= textLength) {
range.setEnd(textNode, rangeEnd);
const box = range.getBoundingClientRect();
if (prevHeight < box.height) {
words.push(prevWord);
prevHeight = NaN;
prevWord = '';
range.setStart(textNode, rangeEnd - 1);
}
else {
prevWord = range.toString();
prevHeight = box.height;
rangeEnd++;
}
}
if (prevWord !== '') {
words.push(prevWord);
};
return words;
}
console.log(
getWordsByLines(document.getElementById('a').childNodes[0])
);
console.log(
getWordsByLines(document.getElementById('b').childNodes[0])
);
console.log(
getWordsByLines(document.getElementById('c').childNodes[0])
);
<div id="a" style="width:30px;word-break:break-word">
some
</div>
<div id="b" style="width:10px;word-break:break-word">
words
</div>
<div id="c" style="width:50px;word-break:break-word">
wordswo大佬123words
</div>
您可能会或可能不会去除前导和尾随 EOL 字符;我离开它们是为了让解决方案更通用。)
推荐阅读
- clickhouse - clickhouse 配置中的环境变量
- google-apps-script - 请求在谷歌应用程序脚本中获取共享驱动器列表 ID 和驱动器名称
- javascript - 带有“target:'node'”和“type:'module'”的 Webpack 配置抛出“require is not defined”
- confluence - Confluence 从云端迁移到服务器
- reactjs - 对象状态更改时 React Native 屏幕不更新
- reactjs - 带有 setTimeout 的 setState 操作带回已删除的元素
- flutter - Flutter + Hive 检查 Future Builder 的框中是否存在值
- javascript - Bootstrap 5 Accordion:使箭头旋转 90 度而不是 180 度
- java - 使用 Microsoft OpenJDK 升级到 Java 17 后的 Java 编码问题
- javascript - 如何以json格式显示我们的数据