2013-04-26 56 views

回答

2

看后插件似乎FirePad使用textarea

根据another SO post的回答,似乎textareas不使用与其他节点相同的选择范围。

accepted answer解释它是这样的:

有多余的bizarreness与textarea的节点回事。如果我记得 正确,那么当您在IE, 中选择它们时,它们的行为与其他任何节点相同,但在其他浏览器中,它们具有独立的选择范围,其中 通过 节点上的.selectionEnd和.selectionStart属性公开。

highest voted answer显示了一个解决方案。

该解决方案使用的参考直接textarea节点和使用该元件的selectionEndselectionStart性能,与此类似从那里获取所选范围:

function myFunction() { 
    var e = document.getElementById('thearea'); 

    //Mozilla and DOM 3.0 
    if ('selectionStart' in e) { 
     var l = e.selectionEnd - e.selectionStart; 

     var start = e.selectionStart, 
      end = e.selectionEnd, 
      length = l, 
      text = e.value.substr(e.selectionStart, l); 

     alert(text); 
    } 
} 

DEMO - 使用selectionStartselectionEndtextarea


我不确定这些日子里所有浏览器的情况是否相同,但上面的代码和链接的SO中的附加信息应该可以帮助您获得理想的结果。

+0

你的回答是好,但您的演示吮吸;-) – musefan 2013-04-26 15:39:34

+0

@musefan:对不起,忘了点击保存的小提琴:)我固定的,现在。很高兴你注意到它。谢谢。 – Nope 2013-04-26 15:41:23

1

Firepad基于CodeMirror。您应该使用CodeMirror公开的功能来执行此操作,而不是直接从DOM中获取选择内容。

退房getSelection()在这里: http://codemirror.net/doc/manual.html