我正在为tinyMCE制作一个单词预测插件,需要提取一些文本,然后从预测的单词列表中插入文本。插入应该没有问题,因为我知道游标在哪里,并且可以使用mceInsertContent命令。但是得到预测的文本..。
我需要提取文本的子集,以光标位置之前的字母结尾,从文本的开头开始。如果需要的话,我可以自己去掉HTML标记,但如果可能的话,我更愿意让tinyMCE去做。
我想这样做:
使用mceInsertContent
现在,由于我对tinyMCE不太熟悉,这对我来说是个挑战,那么我们该怎么做呢?
代码需要跨浏览器工作。
发布于 2012-02-07 15:47:51
您可以尝试以下代码片段(ed是tinymce编辑器对象)
A.使用mceInsertContent在当前光标位置插入书签
ed.execCommand('mceInsertContent', false,'<span class="marker">\ufeff</span>');创建一个范围从文字开始到我的书签。
var rng = ed.selection.getRng(1);
var rng2 = rng.cloneRange();
// set start of range to begin of forst paragraph
rng2.setStartBefore($(ed.getBody()).find('p:first').get(0));
rng2.setEndBefore($(ed.getBody()).find('span.marker').get(0));
ed.selection.setRng(rng2);获取范围的内容。
// get content of selection (range)
var content = ed.selection.getContent({format: 'text'});删除书签。
$(ed.getBody()).find('span.marker').remove();更新:如果您关心选择的更改,您可以重置初始范围
ed.selection.setRng(rng);发布于 2019-07-10 15:04:42
下面是我的解决方案(当按下Ctrl时,这个单词将显示在控制台中):
function isLetter(chr){
if(chr.match(/[A-Za-z\u00C0-\u00D6\u00D8-\u00f6\u00f8-\u00ff]/i)){
return true;
}
else{
return false;
}
}
var editor = tinymce.activeEditor;
var $edBody = $(editor.getBody());
editor.on('KeyUp', function(e){
if(e.code == "ControlLeft"){
var sel = editor.selection.getSel();
var caretPos = sel.anchorOffset;
var txtData = sel.anchorNode.data;
var i = caretPos;
var word = "";
while(i > 0){
if(isLetter(txtData.charAt(i))){
word += txtData.charAt(i);
i -= 1;
}
else{
break;
}
}
word = word.split("").reverse().join("");
i = caretPos + 1;
while(i < txtData.length){
if(isLetter(txtData.charAt(i))){
word += txtData.charAt(i);
i += 1;
}
else{
break;
}
}
console.log(word);
}
});也许有一个更干净或更优雅的方法来解决这个问题,如果是的话,请评论一下,让我们把这个解决方案做得更好。
发布于 2022-07-12 05:32:25
我只是偶然发现了一个类似的用法。我想移除光标位置后的所有内容。
这是我的解决方案
// Insert a unique marker so I can easily find the current position in the editor
const UNIQUE_MARKER = "MARKER";
editor.insertContent(UNIQUE_MARKER);
const markerIndex = editor.getContent().indexOf(UNIQUE_MARKER);
const beforeCursorContent = editor.getContent().slice(0, markerIndex);
editor.setContent(beforeCursorContent);https://stackoverflow.com/questions/9178785
复制相似问题