2016-01-24 283 views
0

在CONTENTEDITABLE光標處插入我曾經有過這樣的代碼:如何使用打字稿

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); 

      } 

     }; 

但打字稿1.5選擇從文件(https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes)去掉,所以我不知道怎麼弄它的工作..我試着用window.getSelection(),但沒有結果

任何幫助,將不勝感激:)

感謝, 邁克爾

回答

2

but in TypeScript 1.5 Selection was removed from Document

這就是特定於Internet Explorer並不適用於所有瀏覽器。所以它被刪除。但是,您可以非常輕鬆地將它用於不安全(將document視爲any)。下面是重構沒有錯誤編譯代碼示例:

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); 
    } 
}; 

當然,這假設你知道你在做什麼,不是編譯器知道更多。

更新

how can I see the compatibility of those among browsers and what is available

你可以看到這裏window.getSelection的兼容性圖表:https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection

document.selection是IE /只特定的,並已被刪除:https://msdn.microsoft.com/en-us/library/ms535869(v=vs.85).aspx

+0

感謝。一些其他方式,將使其與所有瀏覽器兼容? –

+0

需要運行時支持。意味着你需要有一個運行時功能。選項是'polyfill'或'shim'。你有什麼是一個墊片,它的足夠好。 – basarat

+0

如何查看瀏覽器間的兼容性以及可用的內容?謝謝 –