2013-11-14 13 views

回答

3

window.getSelection().toString()應該爲你工作 - 所有的瀏覽器和IE7 +

編輯支持:我很驚訝,這並不爲輸入元素的工作。但是https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement中提到的屬性有selectionStartselectionEnd,因此您可以改用它們。

console.log(!!(el.selectionStart - el.selectionEnd)); 
// where el = your input element, like el = $('input')[0] 

一個輕微的毛刺,雖然,我發現,如果你選擇文本後模糊輸入這些值不會改變,所以我會利用querySelector發現,如果輸入元素具有焦點與否:

document.querySelector('#input:focus') //returns first matched element or null 
+0

更換return res;不與IE9工作和FF25 –

+0

@ThomasZuberbühler耶的確不輸入或textarea的工作。 –

0

最簡單也是最可靠的(我猜)是從jQuery.selection插件取代碼。您將只需要這個功能:

var _getCaretInfo = function(element){ 
    var res = { 
     text: '', 
     start: 0, 
     end: 0 
    }; 

    if (!element.value) { 
     /* 値がない、もしくは空文字列 */ 
     return res; 
    } 

    try { 
     if (win.getSelection) { 
      /* IE 以外 */ 
      res.start = element.selectionStart; 
      res.end = element.selectionEnd; 
      res.text = element.value.slice(res.start, res.end); 
     } else if (doc.selection) { 
      /* for IE */ 
      element.focus(); 

      var range = doc.selection.createRange(), 
       range2 = doc.body.createTextRange(), 
       tmpLength; 

      res.text = range.text; 

      try { 
       range2.moveToElementText(element); 
       range2.setEndPoint('StartToStart', range); 
      } catch (e) { 
       range2 = element.createTextRange(); 
       range2.setEndPoint('StartToStart', range); 
      } 

      res.start = element.value.length - range2.text.length; 
      res.end = res.start + range.text.length; 
     } 
    } catch (e) { 
     /* あきらめる */ 
    } 

    return res; 
}; 

如果不需要IE8 <支持 - if (doc.selection) {部分可以刪除。

要從此功能得到布爾,只是return !!res.text;

相關問題