0

我使用 MooTools Javascript 库。这个库在这里提供了几个非常有用的功能:http: //mootools.net/docs/more/Element/Element.Forms

问题是此功能仅适用于文本区域等“表单”元素。

现在我正在制作一个在线编辑器,对于它自己的编辑器,我使用 div 元素和内容可编辑功能。

当我想在 mootools(更多)库中使用 getCaretPosition 之类的函数时,会调用此行:

var range = this.getDocument().selection.createRange();

但比我得到这个错误:

this.getDocument().selection is undefined

似乎只有表单元素具有此选择对象(在此文档上:S?)。

有没有办法将表单功能添加到 div (或所有)元素?

4

2 回答 2

1

恐怕不会那么容易。看源代码

例如,setSelectionRange有两个断言,1:它有type == "text"(因此,一个输入)或 2:它有一个.value可以读取的属性。如果您将其应用于缺少任何一个的元素,它将无法正常工作。

您可能会在其他地方寻找想法 - 例如,这个 david walsh 文档选择片段可能很有用:

http://davidwalsh.name/text-select-widget

他只是在做:

var getSelection = function() {
    return $try(
        function() { return window.getSelection(); },
        function() { return document.getSelection(); },
        function() {
            var selection = document.selection && document.selection.createRange();
            if(selection.text) { return selection.text; }
            return false;
        }
    ) || false;
};

祝你好运 - 这是我匆忙放在一起的一个非常基本的例子,它提供了获取选择和可能的插入符号位置(基于选择的最后一个字符)作为父元素的偏移量 - http://www.jsfiddle.net/82czp/ 1/

于 2010-06-25T11:11:21.327 回答
0

我在一个名为 CodeMirror 的 Javascript 项目中发现了这个功能(http://marijn.haverbeke.nl/codemirror/,也在 jsfiddle 中使用)。伟大的项目!

于 2010-06-28T21:15:44.147 回答