Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:获取和保存数据库中的文本选择范围_Javascript_Range_Selection_Rangy - Fatal编程技术网

Javascript:获取和保存数据库中的文本选择范围

Javascript:获取和保存数据库中的文本选择范围,javascript,range,selection,rangy,Javascript,Range,Selection,Rangy,我正在为客户端构建一个语法检查系统,用户可以在其中向给定文本添加评论/建议。当用户选择某些文本时,会出现一个按钮,用于创建对给定文本选择的注释/建议。当我想在数据库中保存文本选择范围以及注释/建议时,我的问题就出现了 我目前正试图使用Rangy()解决这个问题 以下是我迄今为止尝试过的想法: 使用rangy序列化程序序列化范围。问题在于 这种方法是,每当一个新的 添加了评论/建议,因此不允许 成功的反序列化 使用rangy选择包装器并将其直接保存在 数据库,但像上面的想法一样,目标元素是内容

我正在为客户端构建一个语法检查系统,用户可以在其中向给定文本添加评论/建议。当用户选择某些文本时,会出现一个按钮,用于创建对给定文本选择的注释/建议。当我想在数据库中保存文本选择范围以及注释/建议时,我的问题就出现了

我目前正试图使用Rangy()解决这个问题

以下是我迄今为止尝试过的想法:

  • 使用rangy序列化程序序列化范围。问题在于 这种方法是,每当一个新的 添加了评论/建议,因此不允许 成功的反序列化
  • 使用rangy选择包装器并将其直接保存在 数据库,但像上面的想法一样,目标元素是内容 根据每个评论/建议进行更改,这再次使方法 没有按预期工作

任何关于我如何解决这个问题的建议都将受到欢迎。

我没有用过兰吉。但我有一个办法

  • 从元素()中获取选定文本

  • 然后添加一个具有特定id的包装范围。(您可能希望从服务器获取唯一id)

  • 然后显示表单以输入注释

  • 提交时,将span id和注释发送到服务器,并将其存储在数据库中

  • 当重新呈现时,您可以很容易地将一个类分配给这个跨度,以标记它,并使用css在悬停时显示注释

  • 这将为您提供一个类似谷歌文档的系统,您可以在其中对文本进行评论

  • 让我知道这是否有帮助,或者您需要更多关于如何完成各个步骤的解释


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

    感谢您的回复,但我的问题不在于获取所选文本并将其保存到数据库中。问题是找到一种方法来获取所选文本范围,然后将该范围保存在数据库(或任何其他格式)中,这样当其他用户看到包含给定文本的页面时,系统可以从数据库中检索文本选择范围,并将其重新添加到文本中。第二次通读后,我想我更了解你的方法。如果我是对的,您想更改文本本身,并使用具有唯一id的span包装器保存文本吗?在这种情况下,我可以看到这将如何工作,但我宁愿不改变原始文本。这是正确的。这就像在word中将文档置于审阅模式。添加换行跨距并不会真正改变文本。但在任何情况下,当建议的更改得到解决时,您都可以删除跨距。还有一种方法可以在不添加跨距的情况下执行相同的操作。您可以轻松找到所选文本。然后,您可以使用indexOf和length找出原始文本中所选内容的位置。然后,您可以将这些点保存在数据库中,以防评论。这个想法类似于我的第二个想法。这样做的问题是,对于添加到文本中的每个新注释/建议,都会在目标文本周围动态添加范围包装,以突出显示它。因此,当你谈到第二条意见/建议时,原文会有所改变。也许我对我的问题解释得不够透彻,但我希望你知道我在努力完成什么。