http://dev.ckeditor.com/ticket/9295 关于这个bug。可以用下面这个方法。找到ckeditor.js,然后替换代码中的mergeSiblings函数就ok了,如果还有问题。可以一起讨论。
mergeSiblings: (function() {
function i(j, k, l) {
if (k && k.type == 1) {
var m = [];
//myself code start
var tempnode;
for(var tttt in j){
tempnode = j[tttt];//get the span node
break;
}
var tempnodecss = tempnode.style.cssText;//get span node style
var list = tempnode.childNodes;//get this node's children
var tempContent;
for(var kkkkk in list){
if(list[kkkkk].tagName !=null && list[kkkkk].tagName !="")
if(list[kkkkk].tagName.toLowerCase()=='span'){//if the node is span ,then combine it
var nodecss = list[kkkkk].style.cssText;
if(nodecss.indexOf("display")<0){//if the sytle attribute is display ,continue
tempnodecss = tempnodecss+nodecss;
list[kkkkk].removeAttribute("style");//remove the style
}
}
}
tempnode.style.cssText = tempnodecss;//set node style
var tempcontent = tempnode.innerHTML;//get node innerHtml
var regExp = new RegExp("<span>","gi");//for replace <span>
var regSpanEnd = new RegExp(">naps\\/<");//for replace</span>
var reglist = tempcontent.match(regExp);//get <span>
var reverseStr="";//temp reverse node innerHtml
tempcontent= tempcontent.replace(regExp,"");//for remove <span>
for(var count in reglist){
//reverse start
for(var iiii=0;iiii<tempcontent.length;iiii++){
reverseStr+=tempcontent.charAt(tempcontent.length-iiii);
}
reverseStr+=tempcontent.charAt(0);
//reverse end
reverseStr=reverseStr.replace(regSpanEnd,"");//remove </span>
tempcontent="";
//reverse again start
for(var iiii=0;iiii<reverseStr.length;iiii++){
tempcontent+=reverseStr.charAt(reverseStr.length-iiii);
}
tempcontent+=reverseStr.charAt(0);
//reverse again end
}
tempnode.innerHTML = tempcontent;//set node innerHtml
//myself code end
while (k.data('cke-bookmark') || k.isEmptyInlineRemoveable()) {
m.push(k);
k = l ? k.getNext() : k.getPrevious();
if (!k || k.type != 1) return;
}
if (j.isIdentical(k)) {
var n = l ? j.getLast() : j.getFirst();
while (m.length) m.shift().move(j, !l);
k.moveChildren(j, !l);
k.remove();
if (n && n.type == 1) n.mergeSiblings();
}
}
};
return function(j) {
var k = this;
if (! (j === false || f.$removeEmpty[k.getName()] || k.is('a'))) return;
i(k, k.getNext(), true);
i(k, k.getPrevious());
};
})(),