2009-12-30 83 views
14

我正在尋找一種方式來設置設置在Internet Explorer的textarea中的選擇。在其他的瀏覽器,這工作得很好:在Internet Explorer中設置textarea選擇

textarea.selectionStart = start; 
textarea.selectionEnd = end; 

在IE中,我想我必須使用createRange並以某種方式調整的選擇,但我無法弄清楚如何。

鏈接到關於createRange和相關方法的適當文檔的額外獎勵點,MSDN幫助不大。在M個

moveStart():

+0

+1 - 我看着這個。我不記得細節(對不起),但它很粘。 IE非常無益。我不得不在我的表單設計中做出某種妥協。 – martinr 2009-12-30 16:38:56

回答

18

這個工作對我來說:

<textarea id="lol"> 
noasdfkvbsdobfbgvobosdobfbgoasopdobfgbooaodfgh 
</textarea> 

<script> 
var range = document.getElementById('lol').createTextRange(); 
range.collapse(true); 
range.moveStart('character', 5); 
range.moveEnd('character', 10); 
range.select(); 
</script> 

相關鏈接SDN:http://msdn.microsoft.com/en-us/library/ms536623%28VS.85%29.aspx

在MSDN moveEnd():http://msdn.microsoft.com/en-us/library/ms536620%28VS.85%29.aspx

+3

優秀,它實際上工作。 'moveEnd'顯然會將選擇相對於起始位置移動,所以它的行爲與'.selectionEnd'不同。偉大的鏈接,謝謝!希望我承諾的獎勵積分將通過其他人upvoting :) – 2009-12-30 17:35:53

17

嘗試用

function select(e, start, end){ 
    e.focus(); 
    if(e.setSelectionRange) 
     e.setSelectionRange(start, end); 
    else if(e.createTextRange) { 
     e = e.createTextRange(); 
     e.collapse(true); 
     e.moveEnd('character', end); 
     e.moveStart('character', start); 
     e.select(); 
    } 
} 
select(document.getElementById('textarea_id'), 5, 10); 
+1

+ 1用於創建瀏覽器感知功能,並首先移動結束,因此不需要算術。這是一個恥辱,我不能接受兩個答案是正確的,watain是第一個,並提供鏈接:) – 2009-12-30 17:38:26

+1

謝謝。我知道,watain是第一個,並提供了一些文件的鏈接,所以他的答案是被標記爲接受的。 – Rafael 2009-12-30 18:26:19

+0

變量名稱'e'的重複使用將我拋棄,但我想我明白你在那裏做了什麼。 – MarkHu 2012-07-03 20:32:13

0

謹防行分隔符的,將*方法把他們看成一個字符,但它們實際上是兩個 - \ r \ n

6

如已經評論的那樣,移動方法將行分隔符看作一個字符(\n)而不是兩個(\r\n)。我已經調整了例程來彌補:

function select(el, start, end) { 
    el.focus(); 

    if (el.setSelectionRange) { 
     el.setSelectionRange(start, end); 
    } 
    else { 
     if(el.createTextRange) { 
      var normalizedValue = el.value.replace(/\r\n/g, "\n"); 

      start -= normalizedValue.slice(0, start).split("\n").length - 1; 
      end -= normalizedValue.slice(0, end).split("\n").length - 1; 

      range=el.createTextRange(); 
      range.collapse(true); 
      range.moveEnd('character', end); 
      range.moveStart('character', start); 
      range.select(); 
     } 
    } 
} 
+0

很棒!謝謝。 – Vasyl 2012-09-21 11:58:11

相關問題