【发布时间】: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