#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:
Как оказалось, я просто передавал аргументы в неправильном порядке. Я должен был передавать узел, который я хотел вставить первым, и узел, который я хотел заменить, вторым.