解决了!
我将 SPAN 标签添加到 tinyMCE 可视化编辑器以显示突出显示的文本。
在突出显示的跨度内键入时,可能会出现光标被困住的情况......无法在跨度之外键入。
我创建了一些在“双空格”上触发的 javascript
以下代码...
1.) 检查当前光标位置是否在我突出显示的 SPAN 内
2.) 检查当前光标位置是否在该 SPAN 的末尾(就在关闭 /SPAN 之前)
3.) 将当前光标从结束 /SPAN 的左侧移动到结束 /SPAN 的右侧
任何或所有的帮助将不胜感激。
正确的代码!
键入时,如果您发现自己位于 SPAN 元素的末尾,请按两次空格键以跳出当前 SPAN
var mycc = ''
ed.onKeyDown.add(function(ed, e){
evt = e || window.event;
var charCode = evt.keyCode || evt.which;
// if dbl space
if(mycc == charCode && charCode==32){
var curElm = ed.selection.getRng().startContainer;
var caretPos = ed.selection.getBookmark(curElm.textContent).rng.startOffset;
// if end of element
if(caretPos==curElm.textContent.length){
var mkr = '<span class="marker">!</span>'
// add marker for cursor positioning
ed.selection.setContent(mkr)
var newstr = ''
// split content at marker (plus ending span for my case)
var c = ed.getContent({format : 'raw'}).split(" "+mkr+"</span>")
if(!c[1]){
c = ed.getContent({format : 'raw'}).split(" "+mkr+"<br></span>")
}
// if the conent was split, adjust as needed
if(c[0]&&c[1]){
// add closing span back plus marker after
newstr = c[0]+'</span>'+mkr+c[1]
// update content
ed.setContent(newstr)
}
// find the marker
var marker = jQuery(ed.getBody()).find('.marker');
// set selection
ed.selection.select(marker.get(0));
// remove marker
marker.remove();
}
}
mycc = charCode
})
ed.onMouseDown.add(function(ed, e){
mycc = ''
})
上面仍然有效,但我使用了下面的代码。当按下右箭头而不是 dbl 空间时,此代码会超出跨度的结束位置
请享用
var mycc = ''
ed.onKeyDown.add(function(ed, e){
evt = e || window.event;
var charCode = evt.keyCode || evt.which;
// if dbl space
//if(mycc == charCode && charCode==32){
if(charCode==39){
var curElm = ed.selection.getRng().startContainer;
var caretPos = ed.selection.getBookmark(curElm.textContent).rng.startOffset;
// if end of element
if(caretPos==curElm.textContent.length){
var mkr = '<span class="marker">!</span>'
ed.selection.setContent(mkr)
var newstr = ''
var c = ed.getContent({format : 'raw'}).split(mkr+"</span>")
if(!c[1]){
c = ed.getContent({format : 'raw'}).split(mkr+"<br></span>")
}
if(c[0]&&c[1]){
newstr = c[0].replace(/^\s\s*/, '').replace(/\s\s*$/, '')+'</span> '+mkr+c[1].replace(/^\s\s*/, '').replace(/\s\s*$/, '').replace(/^[\s( ]+/g,'')
ed.setContent(newstr)
e.preventDefault()
}
var marker = jQuery(ed.getBody()).find('.marker');
ed.selection.select(marker.get(0));
marker.remove();
}
}
mycc = charCode
})