【问题标题】:How to get cursor position in rich:editor richfaces by javascript如何在 Rich:editor Richfaces 中通过 javascript 获取光标位置
【发布时间】:2014-05-10 04:26:53
【问题描述】:

我有一个丰富的编辑器

<rich:editor id="editor" width="1000" height="300"
             value="#{emailTemplateHome.instance.emailTemplateContent}"          
             theme="advanced">
</rich:editor>

和javascript函数

function change(){
            var val = document.getElementById("#{rich:clientId('editor')}");
            if(val != null){    
                var component = val.component;
                var content = component.tinyMCE_editor.getContent();                
                var position = content.slice(0, val.positionedOffset).length;
                var result = content.substr(0,position) + "{chuc_vu}" + content.substr(position);
                component.tinyMCE_editor.setContent(result);    
            }
        }

但是var position 没有定义。

如何获取当前光标的位置???

提前致谢

【问题讨论】:

    标签: javascript jsf richfaces rich-text-editor


    【解决方案1】:

    如果你只想在当前位置插入东西,你可以使用这个:

    component.tinyMCE_editor.execCommand('mceInsertContent', false, "insert text");
    

    如果你想对光标位置做一些事情会很棘手,因为编辑器中的位置与内容中的位置不对应(内容中有 HTML 标记)。您可以通过这种方式获得职位:

    component.tinyMCE_editor.selection.getBookmark().start
    

    val.positionedOffset 是一个返回数组的函数,我不确定你用它做什么(更不用说slice(0,x).length = x)

    【讨论】:

    • 非常感谢。我只想在当前位置插入文本,没关系。但我想插入文本“#{chuc_vu}”,所以它是空文本。使用文本“{chuc_vu}”,它可以正常工作。字符“#”有什么问题???
    • 你想插入一个 bean 值吗?那是行不通的。
    • 没有。这只是一个文本。它看起来像 bean 值。它不能识别那个文本吗?
    • 我可以插入"#{some text}"就好了,你插入的时候是什么样子的?
    • 它显示空文本。我通过 firebug 调试(在 firefox 上)我看到了。
    【解决方案2】:

    在光标位置之后写一些东西:

    function writeAfterCursor(element) {
                        var bm =tinyMCE.activeEditor.selection.getBookmark().start;
                        var content= tinyMCE.activeEditor
                        .getContent();
                        content= strip(content);
                        var res = content.split("");
    
                        var res1= []; 
                        var res2= []; 
                        for(i=0; i < bm; i++){
                            res1[i]=res[i];
                        }
                        var j=0;
                        for(i=bm; i < res.length; i++){
                            res2[j]=res[i];
                            j++;
                        }
                        var content1= res1.join("");
                        var content2= res2.join("");
                        content = content1+ element.value+content2;
                        tinyMCE.activeEditor.setContent(content);
                        tinyMCE.activeEditor.selection.moveToBookmark(bm);
    
                    }
                    function strip(html)
                    {
                       var tmp = document.createElement("DIV");
                       tmp.innerHTML = html;
                       return tmp.textContent || tmp.innerText || "";
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多