Итак, у меня проблема, над которой я работал в течение прошлой недели или около того, и попробовал все, что знал или мог найти. Я использую редактор YUI 2.x, где пользователи будут делать тяжелое форматирование. У меня есть внешняя кнопка на странице, которая должна обернуть выделенный текст в <span>
, когда пользователь нажмет на него, но он должен сделать это без, потеряв любое форматирование. По какой-то причине делает следующее любит, чтобы стереть все форматирование в выборе:Редактор YUI (RTE): Как обернуть выбор с помощью <span> и НЕ проиграть форматирование?
var sel = myEditor._getSelection();
var newEl = '<span>' + sel + '</span>';
myEditor.execCommand('inserthtml', newEl);
Так решить эту проблему, я думаю, что лучший способ заключается в использовании _getSelectedElement()
вместе с _createCurrentElement('span')
добавить обратно элементы стиля. Вот что у меня до сих пор:
function createSpan() {
var el = myEditor._getSelectedElement();
var sel = myEditor._getSelection();
// IE support
if (document.selection) {
sel = myEditor._getDoc().selection.createRange();
newText = sel.text;
}
else {
newText = sel;
}
// Create the new element with the old styles
myEditor._createCurrentElement('span', {color: el.style.color, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily});
myEditor._selectNode(myEditor.currentElement[0]);
myEditor.currentElement[0].innerHTML = newText;
return myEditor.currentElement[0];
}
Это отлично работает, если правильно _getSelectedElement()
возвращает элемент с правильными стилями, но я обнаружил, что если пользователь выбирает весь абзац, он возвращает BODY
. А поскольку BODY
не имеет стилей, они снова теряются.
В принципе, мне нужно, чтобы он вел себя как жирная кнопка на панели инструментов, но используйте <span>
, а не <b>
. Почему это так сложно?
Любые идеи или предложения? Благодаря!
На самом деле это все еще не работает. Любая помощь будет оценена по достоинству. – Adam