Хорошо, у меня возникла проблема, над которой я работал последнюю неделю или около того и перепробовал все, что я знаю или смог найти. Я использую YUI 2.x редактор, где пользователи будут выполнять тяжелое форматирование. У меня есть внешняя кнопка на странице, которая должна обернуть выделенный текст в <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
нет стилей, они снова теряются.
По сути, мне нужно, чтобы он вел себя как кнопка Bold на панели инструментов, но использовал <span>
, а не <b>
. Почему это так сложно?
Есть идеи или предложения? Спасибо!