【问题标题】:Restore multiple selections from db using Rangy使用 Rangy 从 db 恢复多个选择
【发布时间】:2013-01-19 16:50:22
【问题描述】:

我想做什么:

->向用户显示纯 HTML 页面 ->用户可以在该页面上突出显示文本 ->当用户下次登录时,我应该能够在页面上检索并显示他以前的(多个)突出显示。

我做了什么:

我使用了Library/API : Rangy。有了这个我可以选择文本并用用户喜欢的颜色突出显示它。

问题:

我尝试了序列化和反序列化功能,但是当我尝试反序列化(重新加载页面后)时,它给了我一个错误提示

序列化范围根节点 (ec0c8cf0) 和目标根的校验和 节点(d4997863)不匹配

每次我重新加载页面时,都会有一个新的根节点,在这种情况下我该如何解决反序列化?

创建了一个 JS-Fiddle : demo / js-fiddle

这是什么 - 如果你查看我的演示,我选择描述的第一个词,即“请”,我得到突出显示的文本,我也得到序列:

0/3/1/3/0/1/1/2:9,0/3/1/3/0/1/1/2:9{b3002d92}

所以我所做的是,我对这个序列进行了硬编码,并将其放入页面 onLoad 函数中的 deserializeSelection 函数中,如下所示:-

rangy.deserializeSelection('0/3/1/3/0/1/1/2:9,0/3/1/3/0/1/1/2:9{b3002d92}');

所以从技术上讲,它应该突出显示描述中的“请”,无论何时加载页面,但它没有,而是在块中给我上述错误。 你能帮我解决这个问题吗?请。谢谢

额外:

1.rangy的serialize和de-serialize方法我实在看不懂。

2.我从这里开始的非常抽象的路线图是,在页面加载时执行 AJAX 调用,并从我的数据库中获取此页面的所有(序列化)用户选择,然后迭代它们并进行反序列化。

任何帮助,将不胜感激。 谢谢。

【问题讨论】:

  • 为什么插件使用ajax而不是存储方法?对于支持它的现代浏览器,也可以修改为使用localStorage 而不是 cookie
  • 这个演示 rangy.googlecode.com/svn/trunk/demos/serializer.html 还展示了如何使用序列化更新输入值,以及从输入值更新 dom。如果您发送到数据库,将使用相同的值/方法
  • @charlietfl,感谢您的快速响应,是的,我看到了序列化方法,但我面临的困难是,当我反序列化(呈现高亮)时,我们只能做到 1选择,我怎样才能对多项选择做同样的事情?
  • 如果您持有ctrl 进行多项选择,则效果很好,否则您需要将各种选择存储在一个数组中并发送数组,然后在 ajax 循环中遍历数组来恢复
  • @charlietfl,对不起,听不懂你的意思,我应该按 ctrl,进行各种选择 -> 进行序列化 -> 进行反序列化以获取所有选择(此功能适用于我:()

标签: javascript jquery ajax rangy


【解决方案1】:

我认为你应该试试这个:

var selObj = rangy.getSelection();
var se = rangy.serializeSelection(selObj, true); //true to avoid DOM checksum

【讨论】:

  • 将尝试并取回@arvindBharadwaj
  • @arvindBharadwaj 好像打不通,你能帮忙吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 2014-08-25
  • 2016-08-20
  • 2022-06-17
  • 1970-01-01
相关资源
最近更新 更多