【问题标题】:Javascript: Getting and saving text selection ranges in a databaseJavascript:在数据库中获取和保存文本选择范围
【发布时间】:2013-08-15 16:04:33
【问题描述】:

我正在为客户构建一个语法检查器系统,用户可以在其中向给定文本添加 cmets/suggestions。当用户选择一些文本时,会出现一个按钮来为给定的文本选择创建评论/建议。当我想将文本选择范围连同评论/建议一起保存在数据库中时,我的问题就出现了。

我目前正在尝试使用 Rangy (http://rangy.googlecode.com/) 来解决问题。

这些是我迄今为止尝试过的想法:

  • 使用 rangy 序列化程序对范围进行序列化。问题与 这种方法是每次新的 DOM 都在变化 添加了评论/建议,因此不允许 成功反序列化。
  • 使用范围广泛的选择包装并将其直接保存在 数据库,但和上面的想法一样,目标元素内容是 随着每个评论/建议而改变,这再次使方法 无法按预期工作。

任何关于我如何解决这个问题的建议都会被采纳。

【问题讨论】:

    标签: javascript range selection rangy


    【解决方案1】:

    我没用过rangy。但这是我可以解决的一种方法。

    1. 从元素中获取选定的文本 (tutorial here)

    2. 然后添加一个带有特定 id 的 wrapper span。 (你可能想从你的服务器获取一个唯一的 id)

    3. 然后显示一个表格输入 cmets。

    4. 在提交时,将 span id 和评论发送到服务器并将其存储在数据库中。

    5. 重新渲染时,您可以轻松地为该跨度分配一个类以标记它并使用 css 在悬停时显示 cmets。

    6. 这将为您提供一个类似于 google 文档的系统,您可以在其中对文本进行评论。

    如果这有帮助,或者您需要更多关于如何完成各个步骤的说明,请告诉我。

    这样做的好处是您不需要将选定的文本发送回服务器或担心序列化。只是你包裹它的 span 的 id。

    【讨论】:

    • 感谢您的回复,但我的问题不在于获取所选文本并将其保存在数据库中。问题是找到一种方法来获取选定的文本范围,然后将该范围保存在数据库(或任何其他格式)中,这样当另一个用户看到具有给定文本的页面时,系统可以从数据库,并将它们重新添加到文本中。
    • 经过第二次通读,我想我更好地理解了您的方法的全部内容。如果我是对的,您想更改文本本身,并使用具有唯一 ID 的跨度包装器保存文本?在这种情况下,我可以看到它是如何工作的,但我不想更改原始文本。
    • 没错。这就像在 Word 中将文档置于审阅模式一样。添加环绕跨度并没有真正改变文本。但无论如何,当建议的更改得到解决时,您可以删除跨度。
    • 还有另一种方法可以在不添加跨度的情况下做同样的事情。您可以轻松找到所选文本。然后您可以使用 indexOf 和长度找出所选内容在原始文本中的位置。然后,您可以根据 cmets 将这些点保存在数据库中。
    • 这个想法和我的第二个想法差不多。这样做的问题是,对于添加到文本中的每个新评论/建议,都会在目标文本周围动态添加跨度包装,以突出显示它。因此,当您收到第二条评论/建议时,原始文本会发生变化。也许我没有充分解释我的问题,但我希望你对我想要完成的事情有所了解。
    猜你喜欢
    • 2017-01-26
    • 1970-01-01
    • 2012-08-25
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多