tinymce.dom.replace выдает исключение, касающееся родительского узла

#dom #replace #tinymce

#dom #заменить #tinymce

Вопрос:

Я пишу плагин TinyMCE, который содержит раздел кода, заменяющий один элемент на другой. Я использую экземпляр dom редактора для создания узла, который я хочу вставить, и я использую тот же экземпляр для выполнения замены.

Мой код выглядит следующим образом:

var nodeData =
 {
 "data-widgetID": data.widget.widgetKey(), 
 "data-instanceKey": "instance1", 
 src: "/content/images/icon48/cog.png", 
 класс: "widgetPlaceholder", 
 заголовок: data.widget.getInfo().name
 };

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

// Вставьте это содержимое в окно редактора 
если (data.mode == 'добавить') { 
 tinymce.DOM.add(ред.getBody(), nodeToInsert);
}
иначе, если (data.mode == 'edit' amp;amp; data.selected != null) {

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

 если (elementToReplace.длина === 1) { 
 ed.dom.replace(elementToReplace[0], nodeToInsert);
 }
 else { 
 создать "Нет элемента для замены этим ключом экземпляра";
 }
}

TinyMCE прерывается во время замены, здесь:

replace : функция(n, o, k) { 
 var t = this;

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

 верните t.run(o, function(o) { 
 if (k) {
 каждый (tinymce.grep(o.дочерние узлы), функция (c) { 
 n.appendChild(c);
 });
 }

 возвращает o.parentNode.replaceChild(n, o);
 });
},

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

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

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

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

Комментарии:

1. что означает, что «console.log(o,o.parent,n);» уступает помещенному прямо перед «return o.parentNode.replaceChild(n, o);»?

Ответ №1:

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