首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >tinyMCE -获取到光标位置的内容

tinyMCE -获取到光标位置的内容
EN

Stack Overflow用户
提问于 2012-02-07 15:18:33
回答 3查看 13.4K关注 0票数 3

我正在为tinyMCE制作一个单词预测插件,需要提取一些文本,然后从预测的单词列表中插入文本。插入应该没有问题,因为我知道游标在哪里,并且可以使用mceInsertContent命令。但是得到预测的文本..。

我需要提取文本的子集,以光标位置之前的字母结尾,从文本的开头开始。如果需要的话,我可以自己去掉HTML标记,但如果可能的话,我更愿意让tinyMCE去做。

我想这样做:

使用mceInsertContent

  • Create在当前光标位置插入书签从文本开始到我的书签。

  • 获取范围的内容。

  • 删除书签。

现在,由于我对tinyMCE不太熟悉,这对我来说是个挑战,那么我们该怎么做呢?

代码需要跨浏览器工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-07 15:47:51

您可以尝试以下代码片段(ed是tinymce编辑器对象)

A.使用mceInsertContent在当前光标位置插入书签

代码语言:javascript
运行
复制
ed.execCommand('mceInsertContent', false,'<span class="marker">\ufeff</span>');

创建一个范围从文字开始到我的书签。

代码语言:javascript
运行
复制
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);

获取范围的内容。

代码语言:javascript
运行
复制
// get content of selection (range)
var content = ed.selection.getContent({format: 'text'});

删除书签。

代码语言:javascript
运行
复制
$(ed.getBody()).find('span.marker').remove();

更新:如果您关心选择的更改,您可以重置初始范围

代码语言:javascript
运行
复制
ed.selection.setRng(rng);
票数 10
EN

Stack Overflow用户

发布于 2019-07-10 15:04:42

下面是我的解决方案(当按下Ctrl时,这个单词将显示在控制台中):

代码语言:javascript
运行
复制
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);
    }
});

也许有一个更干净或更优雅的方法来解决这个问题,如果是的话,请评论一下,让我们把这个解决方案做得更好。

票数 1
EN

Stack Overflow用户

发布于 2022-07-12 05:32:25

我只是偶然发现了一个类似的用法。我想移除光标位置后的所有内容。

这是我的解决方案

代码语言:javascript
运行
复制
// 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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9178785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档