我可以将多行文本的每一行换行到一个跨度中吗?

2024-04-07

我一直在试图弄清楚如何做到这一点(如果可能的话)并且画了一个空白......

我有一些文本将换行为多行。我想检测每一行,并将其包装在一个跨度中。最后,我想为循环数组中的每个范围分配一个类。

例如...!

<div id="quote">
    I have some text that
    wraps onto three lines
    in this container
</div>

我想让我的 jQuery 解析这些行,检测它的换行位置,然后将其转换为:

<div id="quote">
    <span class="red-bg">I have some text that</span>
    <span class="orange-bg">wraps onto three lines</span>
    <span class="yellow-bg">in this container</span>
</div>

我想要动态执行此操作的原因是我在响应式模板中执行此操作,因此有时相同的文本只会换行为两行,或者在 iPhone 中可能为四行。

这可行吗?我找到了这个->http://vidasp.net/tinydemos/numberOfLines.html http://vidasp.net/tinydemos/numberOfLines.html它计算文本块中使用的行数,但这并没有真正扩展到执行我需要的操作。


您似乎在问如何在浏览器自然包裹的地方分割文本。不幸的是,这根本就不简单。它也不健壮——考虑以下场景:

  • 用户浏览到您的页面,div 被渲染并触发 onload 事件,
  • 从文本节点创建 3 个 span 元素,每行换行文本 1 个,
  • 用户调整浏览器大小并且 div 的大小发生变化。

结果是跨度不再与线条的起点和终点相关。当然,使用固定宽度元素可以避免这种情况,或者您可以在浏览器调整大小时重新调整整个元素,但这只是它如何破坏的一个示例。

尽管如此,这并不容易。 A类似的问题 https://stackoverflow.com/questions/2456442/how-can-i-highlight-the-line-of-text-that-is-closest-to-the-mouse之前已经出现过(尽管目标不同)并且出现了两种解决方案,这两种解决方案都可以在这里提供帮助:

解决方案1:getClientRects() https://stackoverflow.com/questions/2456442/how-can-i-highlight-the-line-of-text-that-is-closest-to-the-mouse/2456631#2456631

实际上并不将文本包裹在跨度中,而是使用以下命令获取每行文本的位置和尺寸getClientRects()。然后,创建所需的跨度数量,并将其放置在每行文本后面/调整其大小。

Pros

  • 快速地; getClientRects 返回每行的位置
  • 简单的;代码比方案2更优雅

Cons

  • 换行文本必须包含在行内元素中。
  • 任何样式实际上都不会应用于文本(例如字体粗细或字体颜色)。仅对背景颜色或边框等有用。

提供的演示 http://jsbin.com/avuku/15答案显示如何突出显示当前鼠标下方的文本行。

解决方案2:拆分、连接、循环、合并 https://stackoverflow.com/questions/2456442/how-can-i-highlight-the-line-of-text-that-is-closest-to-the-mouse/2456582#2456582

使用以下命令将文本拆分为数组split()以单词边界或空格作为参数传递的方法。将数组重新连接成字符串</span><span>在每个元素之间并将整个元素包裹起来<span> and </span>,并用包含元素中生成的 HTML 替换原始文本节点。现在,迭代每个 span 元素,检查其y容器内的位置。当。。。的时候y位置增加,您知道已经到达新行,并且之前的元素可以合并到单个跨度中。

Pros

  • 每行都可以使用任何 CSS 属性进行样式设置,例如 font-weight 或 text-decoration。
  • 每行都可以有自己的事件处理程序。

Cons

  • 由于大量 DOM 和字符串操作,速度缓慢且笨重

结论

可能还有其他方法可以实现您的目标,但我自己也不确定。TextNode.splitText(n)当传递要分割的字符的数字索引时,可以将 TextNode 分割为 twain (!)。上述两种解决方案都不是完美的,并且一旦包含元素调整大小,它们都会崩溃。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以将多行文本的每一行换行到一个跨度中吗? 的相关文章

随机推荐

  • 树 /f cmd 修改日期。 Windows Powershell

    我需要创建一个 tree驱动器的文件夹 子文件夹和修改日期的列表 tree f命令效果很好 但我需要添加修改日期 我怎样才能做到这一点 它不会那么漂亮 但你可以使用 Recurse使用 Get ChildItem 选项来查找所有这些 此外
  • 是否可以使用 python-shell 包在 Node JS 中安装 python 包?

    我刚刚知道我们可以使用下面的 npm 包在 Node JS 中运行 Python 脚本 蟒蛇外壳 https www npmjs com package python shell 是否可以使用相同的库安装 python 包 就像是pip i
  • 自定义组件上的 OverlayTrigger 不起作用

    我试图在自定义组件 按钮 悬停时显示弹出窗口 class MyComponent extends React PureComponent
  • 如何避免页脚上的手风琴重叠

    我是 jQuery 新手 我正在使用手风琴 当我单击手风琴时 它会重叠在页脚上 我怎样才能避免它 下面是页脚的代码
  • 使用 mmap 访问 PCI-e 内存空间

    我在 Freescale MPC8308 处理器 基于 PowerPC 架构 上使用 PCI e 端口 在尝试使用它时遇到一些问题 端点 PCI e 设备的内存空间等于 256 MB 我可以使用 pciutils 包轻松读取和写入端点设备的
  • wxhaskell异步更新

    我正在使用 WxHaskell 以图形方式显示使用 TCP 通告状态更新的程序的状态 我使用 Data Binary 对其进行解码 当收到更新时 我想更新显示 所以我希望 GUI 能够异步更新其显示 我知道processExecAsync异
  • 如何强制在 DateTimeAxis 上显示特定日期

    是否可以强制在图表上显示网格线以及极端数据点的日期 我已经尝试了以下 Chart DateTimeAxis 属性的几乎所有配置 IntervalType Interval Minimum and Maximum但我对结果并不满意 设置属性M
  • B 树、数据库、顺序插入与随机插入以及速度。随机就是胜利

    EDIT Remus 纠正了我的测试模式 您可以在下面看到他的答案的更正版本 我采纳了用 DECIMAL 29 0 替换 INT 的建议 结果是 十进制 2133GUID 1836 即使行稍大一些 随机插入仍然获胜 尽管有解释表明随机插入比
  • 使用 SFINAE 检测成员函数 [重复]

    这个问题在这里已经有答案了 C 11中 判断一个类是否有成员函数size 您可以定义以下测试助手 template
  • 如何包含 Linux 头文件(如 linux/getcpu.h)?

    我在用着Linux 3 5 0 17 generic 28 Ubuntu SMP Tue Oct 9 19 31 23 UTC 2012 x86 64 GNU Linux 我需要 include
  • 如何在每个“exec”命令处执行 Docker 映像的入口点?

    在尝试使用 Dockerspec 测试 Dockerfiles 后 我终于得到了an issue https github com zuazo dockerspec issues 12我无法正确解决 我认为问题出在 Docker 本身 如果
  • 跨平台 Windows / OS X 开发,具有大量现有代码库

    对于使用 MFC 和 WinAPI 用 C 编写的复杂应用程序 有大量现有代码库 需要将其移植到 Mac OS X 理想的解决方案是在不同平台之间拥有尽可能多的通用代码 尤其是诸如业务之类的代码逻辑 GUI 可能会有所不同 具体取决于跨平台
  • 在 64 位 C++ 程序中使用 32 位库

    有什么方法可以在 64 位系统中使用旧的 32 位静态库 a 吗 没有机会获得这个旧库的源代码来再次编译它 我也不想在 gcc 中使用 m32 因为该程序使用许多 64 位库 谢谢 这完全取决于您运行的平台 例如 PowerPC 上的 OS
  • 调试 CoreGraphics/MapKit 中的崩溃

    当我的应用程序在 iPhone 上运行时 我遇到间歇性崩溃 所有崩溃都是相同的 并且以某种方式涉及 MKMapView Overlays MKCircleViews 来自典型的 iPhone 4s 崩溃报告 报告标题 Hardware Mo
  • 如何在 SMPP 中正确表示消息类别

    我目前正在尝试弄清楚 sms 类如何在 SMPP 中正确表示 然而 我现在对标准及其文档完全感到困惑 在普通短信中我们有 Class0 Flash短信 显示在显示屏上 Class1 普通短信存储在 SIM 卡上或设备内部 查看SMPP规范
  • 如何忽略 CMakeLists.txt 中单个 CMake 命令的错误?

    我有一个项目CMakeLists txt尝试读取可能存在或不存在的文件 文件丢失不是问题 脚本可以处理这两种情况 如果我们可以检测到已知的 Linux 发行版 这将用于稍微调整编译环境 file READ etc redhat releas
  • FragmentTransaction.remove 没有效果

    我的要求非常简单 我有一个按钮可以逐个片段地替换片段 这听起来很容易并且几乎可行 最大的问题是旧片段没有被删除 新片段被放置在旧片段的前面 并且它们在我的布局中 生活 在一起 代码 FragmentManager fragMgr a get
  • Xamarin Forms 4.1.0:找不到方法:void .ResourceLoadingQuery.set_Instance(object)

    SOLUTION 解决方案在这里 https github com xamarin Xamarin Forms issues 6787 或者只需确保解决方案中使用 Xamarin Forms 的所有项目均已更新 原始问题 从 4 0 0 4
  • Python functools.lru_cache 驱逐回调或等效函数

    是否可以定义回调functools lru cache当一个项目被驱逐时 在回调中还应该存在缓存的值 如果没有 也许有人知道一个支持驱逐和回调的轻量级类似字典的缓存 我将我使用的解决方案发布出来以供将来参考 我使用了一个名为cachetoo
  • 我可以将多行文本的每一行换行到一个跨度中吗?

    我一直在试图弄清楚如何做到这一点 如果可能的话 并且画了一个空白 我有一些文本将换行为多行 我想检测每一行 并将其包装在一个跨度中 最后 我想为循环数组中的每个范围分配一个类 例如 div I have some text that wra