好的,所以我遇到了一个问题,我在过去一周左右一直在处理,并且尝试了我所知道或能找到的一切。我正在使用 YUI 2.x 编辑器,用户将在其中进行一些繁重的格式化。我在页面上有一个外部按钮,当用户单击它时需要将所选文本包装在 a<span>
中,但它必须在不丢失任何格式的情况下执行此操作。出于某种原因,执行以下操作会删除选择中的所有格式:
var sel = myEditor._getSelection();
var newEl = '<span>' + sel + '</span>';
myEditor.execCommand('inserthtml', newEl);
所以要解决这个问题,我认为最好的方法是使用_getSelectedElement()
with_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
没有任何样式,他们又迷路了。
基本上,我需要它的行为类似于工具栏上的粗体按钮,但使用 a<span>
而不是<b>
. 为什么这么难?
有什么想法或建议吗?谢谢!