【发布时间】:2013-04-19 20:19:54
【问题描述】:
我查看了与此相关的类似 SO 帖子,但没有一个与我正在寻找的内容完全相关。假设我有一些文本,我将其放入一个 div 中,并为该 div 添加一些任意(甚至可能是动态的)宽度。有没有什么方法可以让我以编程方式捕获和操作 div 中的单行文本(例如,捕获每一行文本,然后将其包装在其自己的 span 标签中,或者类似的东西使我能够操作单行)?
我已经能够使用等宽字体完成此操作,并且基本上首先每行创建一个跨度,然后为每个跨度分配相同数量的字符(使用一些额外的代码,因此单词当然不会被截断),但我希望能够使用非等宽字体执行此操作,这当然会导致问题,因为非等宽字体的字符水平间距会有所不同。
var str = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
container = $('<div>');
container.width('100px').html(str).appendTo('body');
这个输出几乎是你所期望的。它是live here。我想弄清楚的:
是否会在换行时自动插入我可以访问的换行符?
我可以破解 DOM 中的任何其他机制或属性来操纵 div 中的一行吗?
是否有另一种我没有想到的方法来保持非等宽文本自然流动的外观,同时能够逐行访问文本?正如我上面所说,我已经通过等宽文本实现了这一点,但我的方法依赖于等宽文本的统一水平间距。
【问题讨论】:
-
最好的解决方案是可能将每个单词包装在一个跨度中,然后按顺序检查跨度的垂直偏移量。当单词“x+1”的偏移量高于单词“x”时,你已经到了一个新行。
-
嘿,我只是想让每个人都知道,我想我实际上已经想出了一个非常可靠的答案,下面发布。如果您想从 div 中捕获单行文本,绝对值得一试。
标签: javascript jquery html css