【问题标题】:Get cursor position or number of line on which the cursor is in TinyMCE获取光标位置或光标在 TinyMCE 中的行数
【发布时间】:2012-08-08 08:01:14
【问题描述】:

如何获取光标在TinyMCE中的位置或光标在TinyMCE中的行数?

【问题讨论】:

    标签: javascript jquery html tinymce rte


    【解决方案1】:

    这是我自己的一个插件中的一个函数的一部分,我用它来获取实际的行号:

            var ed = tinymce.get('my_editor_id');
            var bm = ed.selection.getBookmark();
            var $marker = $(ed.getBody()).find('#'+bm.id);
            var elem = ed.getDoc().getElementById(bm.id+'_start');
            try {
                box = elem.getBoundingClientRect();
            } 
            catch(e) 
            {
                                // should not happen
                console.log('error creating box: ' + e);
            }
    
            var doc = ed.getDoc(),
                docElem = doc.documentElement,
                body = ed.getBody(),
                win = ed.getWin(),
                clientTop  = docElem.clientTop  || body.clientTop  || 0,
                clientLeft = docElem.clientLeft || body.clientLeft || 0,
                scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
                scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
                top  = box.top  + scrollTop  - clientTop,
                left = box.left + scrollLeft - clientLeft;
    
            // set Bookmark
            ed.selection.moveToBookmark(bm);
    
            var caret_line = Math.floor( (top) / lineHeight ) + 1;
    

    函数getBoundingClientRect()用于创建一个盒子,我们可以从中得到几个定位信息。请注意,我们需要使用标记元素并稍后重置插入符号。

    更新: lineHeight 的信息

                // get height of row: eighter line-height or min-height
                if ( $(ed.getBody()).find('p:first').css('line-height') != 'normal'){
                    lineHeight = $(ed.getBody()).find('p:first').css('line-height') ;
                }
                else {
                    lineHeight = $(ed.getBody()).find('p:first').css('min-height');
                }
    
                var lineHeight = lineHeight.substr(0, lineHeight.length -2 );
    

    【讨论】:

    • 你能看到这个问题吗:stackoverflow.com/questions/11881262/…
    • 请问您的代码中的 lineHeight 是什么?你没有在任何地方定义它。谢谢:)
    • 查看我的更新答案,在我们的用例中,我们为编辑器中的所有段落定义了高度
    • 哦,我明白了,所以您为每个段落指定了高度!感谢您的帮助:) 尝试将它与锚偏移量一起使用也许我可以找到插入符号的位置..
    • 这对我不起作用,linHeight 最终为 0,然后除以它得到无穷大。 paste.ubuntu.com/15189004
    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 2016-04-17
    • 1970-01-01
    • 2018-06-16
    • 2013-04-29
    • 2020-03-22
    • 2018-03-21
    • 2017-07-27
    相关资源
    最近更新 更多