Обернуть элемент TinyMCE другим (новым) - PullRequest
2 голосов
/ 24 августа 2010

Я создаю плагин для TinyMCE, и мне нужно обернуть существующий элемент (узел) новым.

Например, если у меня есть параграф:

<p>hello</p>

после команды мне нужно:

<div id="someid"><p>hello</p></div>

Я попробовал ниже, но он не переносит абзацы, только их тело, например:

tinyMCEPopup.editor.execCommand('mceReplaceContent',true,'<div id="someid">{$selection}</div>')

создает

<p><div id="someid">hello</div></p>

Какой самый простой способ сделать это?

Обновление:

Наконец, я решил использовать конструкцию ниже (без jQuery):

// Get instance of the editor       
var ed = tinyMCEPopup.editor;

// we are collecting <p> or other default tag to cover it       
var node = tinyMCEPopup.editor.selection.getNode();

// create new dom objects   
var newNode =  ed.dom.create('div', {'class' : 'accordionContent'}); 
var newHNode =  ed.dom.create('h2', {'class' : 'accordionTitle'},document.forms[0].title.value);

// dom modifications
ed.dom.add(node.parentNode, newHNode);
ed.dom.add(node.parentNode, newNode);
newNode.appendChild(node);

Ответы [ 2 ]

2 голосов
/ 24 августа 2010

Если вы можете использовать jQuery в вашем приложении, есть функция wrap () . Если бы у вас было

<div id="someid">hello</div>

Тогда вы можете сделать:

$('#someid').wrap('<p />')

Дает вам:

<p><div id="someid">hello</div></p>

Обновление:

Прочитал ваш вопрос еще раз, и я думаю, что вам может понадобиться wrapInner () .

1 голос
/ 25 июля 2013

Я знаю, что это очень старый, но для дальнейшего использования

var ed = tinymce.get("editorId");
$(ed.selection.getNode()).wrap("<div id='someid' />");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...