tinymce.dom.replace抛出有关parentNode的异常

时间:2011-06-08 16:31:30

标签: dom replace tinymce

我正在编写一个tinyMce插件,其中包含一段代码,将一个元素替换为另一个元素。我正在使用编辑器的dom实例来创建我想要插入的节点,并且我使用相同的实例来进行替换。

我的代码如下:

var nodeData =
  {
    "data-widgetId": data.widget.widgetKey(),
    "data-instanceKey": "instance1",
    src: "/content/images/icon48/cog.png",
    class: "widgetPlaceholder",
    title: data.widget.getInfo().name
  };

var nodeToInsert = ed.dom.create("img", nodeData);

// Insert this content into the editor window
if (data.mode == 'add') {
  tinymce.DOM.add(ed.getBody(), nodeToInsert);
}
else if (data.mode == 'edit' && data.selected != null) {

  var instanceKey = $(data.selected).attr("data-instancekey");
  var elementToReplace = tinymce.DOM.select("[data-instancekey=" + instanceKey + "]");

  if (elementToReplace.length === 1) {
    ed.dom.replace(elementToReplace[0], nodeToInsert);
  }
  else {
    throw new "No element to replace with that instance key";
  }
}

TinyMCE在替换期间中断,这里:

replace : function(n, o, k) {
  var t = this;

  if (is(o, 'array'))
    n = n.cloneNode(true);

  return t.run(o, function(o) {
    if (k) {
      each(tinymce.grep(o.childNodes), function(c) {
        n.appendChild(c);
      });
    }

    return o.parentNode.replaceChild(n, o);
  });
},

..错误为Cannot call method 'replaceChild' of null

我已经验证了传递给replace()的两个参数不为空,并且实例化了它们的parentNode字段。我还注意确保使用相同的文档实例创建和替换元素(我理解I.E有一个问题)。

我已经在Google Chrome中完成了所有这些开发,但我在Firefox 4和IE8中也收到了相同的错误。还有其他人遇到过这个吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

事实证明,我只是以错误的顺序传递参数。我应该首先传递我想插入的节点,然后我想要替换第二个节点。