2009-12-30 75 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

相关问题