如何使用TypeScript插入contenteditable的插入位置

时间:2016-01-24 22:35:07

标签: typescript contenteditable caret

我以前有这样的代码:

this.insertNodeAtCaret = function(node) {

            var sel, range, html;

            function containerIsEditable(selection) {
                return $(selection.anchorNode).parent().hasClass("editable");
            }

            if (window.getSelection) {
                sel = window.getSelection();
                // only if it is a caret otherwise it inserts
                // anywhere!
                if (containerIsEditable(sel) && sel.getRangeAt
                        && sel.rangeCount) {
                    var previousPosition = sel.getRangeAt(0).startOffset;
                    sel.getRangeAt(0).insertNode(node);
                }
            } 
            else if (document.selection
                    && document.selection.createRange) {
                range = document.selection.createRange();
                html = (node.nodeType == 3) ? node.data
                        : node.outerHTML;
                range.pasteHTML(html);  

            }

        };

但在TypeScript 1.5中选择已从Document(https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes)中删除,所以我不知道如何使它工作..我尝试使用window.getSelection()但没有结果

任何帮助将不胜感激:)

谢谢, 迈克尔

1 个答案:

答案 0 :(得分:4)

  

但在TypeScript 1.5中,选择已从Document

中删除

这是特定于Internet Explorer 一般不适用于所有浏览器。所以它被删除了。但是,您可以非常轻松地使用不安全(将melt(dt, id = "x")[order(-value), .SD[1:3], keyby = variable] # variable x value # 1: y a 2 # 2: y b 2 # 3: y c 2 # 4: z c 3 # 5: z a 3 # 6: z a 2 视为document)。这是您重构的代码示例,无需编译即可编译:

any

当然,这假设您知道自己在做什么,而不是编译器知道。

更新

  

如何查看浏览器之间的兼容性以及可用的内容

您可以在此处查看window.getSelection的兼容性图表:https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection

const insertNodeAtCaret = function (node) { const doc = document as any; var sel, range, html; function containerIsEditable(selection) { return $(selection.anchorNode).parent().hasClass("editable"); } if (window.getSelection) { sel = window.getSelection(); // only if it is a caret otherwise it inserts // anywhere! if (containerIsEditable(sel) && sel.getRangeAt && sel.rangeCount) { var previousPosition = sel.getRangeAt(0).startOffset; sel.getRangeAt(0).insertNode(node); } } else if (doc.selection && doc.selection.createRange) { range = doc.selection.createRange(); html = (node.nodeType == 3) ? node.data : node.outerHTML; range.pasteHTML(html); } }; 仅限IE /特定,已被删除:https://msdn.microsoft.com/en-us/library/ms535869(v=vs.85).aspx