tinymce.dom.replace выдает исключение относительно parentNode - PullRequest
1 голос
/ 08 июня 2011

Я пишу плагин 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);
      });
    }

    <b>return o.parentNode.replaceChild(n, o);</b>
  });
},

.. с ошибкой Cannot call method 'replaceChild' of null.

Я проверил, что два аргумента, передаваемые в replace(), не равны NULL и что их parentNode поля созданы. Я также позаботился о том, чтобы убедиться, что элементы создаются и заменяются с использованием одного и того же экземпляра документа (я понимаю, что у I.E есть проблема с этим).

Я проделал всю эту разработку в Google Chrome, но я получаю те же ошибки в Firefox 4 и IE8. Кто-нибудь еще сталкивался с этим?

Заранее спасибо

1 Ответ

1 голос
/ 10 июня 2011

Как оказалось, я просто передавал аргументы в неправильном порядке. Я должен был пропустить узел, который я хотел вставить первым, и узел, который я хотел заменить вторым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...