我有以下两个功能:

function menuItemListener( link ) {
var side = link.getAttribute("data-action");
if (side == 'Mark as A' || side == 'Mark as B') {
    highlighter(side);
    $.ajax({
    method: "POST",
    url: "http://localhost:3000/",
    dataType: "json",
    data: JSON.stringify({"rangyobject" : rangy.saveSelection()}),
    contentType: "application/json; charset=utf-8",
    success: function(result) {
      console.log('yei');
    }
  });
}
toggleMenuOff();
}

function loadHighlights () {
window.addEventListener("load", function load(event){
$.ajax({
    method: "GET",
    url: "http://localhost:3000/ranges",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(result) {
     console.log('loadHighlights results: ', result[0].rangyObject);
     rangy.restoreSelection(result[0].rangyObject);
    }
  });


},假);
  };

因此,它只是将rangy.saveSelection()存储在数据库中,然后将其取回并尝试在其第一个元素上进行rangy.restoreSelection。
console.log看起来不错,但是控制台出现错误:

错误:Rangy WrappedRange模块中的错误:createRange():参数必须是Window对象或DOM节点

最佳答案

rangy.saveSelection()在控制台中如下所示:

{win:未定义,rangeInfos:数组,已恢复:false}
注意“ win:未定义”
当我将其发送到数据库时,我使用

数据:JSON.stringify({“ rangyObject”:rangy.saveSelection()})
从数据库取回时,它看起来像:

{rangeInfos:数组,已恢复:false}
注意,保存到数据库时省略了“ win”


我能够使用序列化和反序列化功能来规避此问题,但是这些功能无法使用创建的跨度来创建ID,因此我遇到了另一个问题。

关于node.js - 错误:Rangy WrappedRange模块中的错误:createRange():参数必须是Window对象或DOM Node ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40558527/

10-09 22:21