HTML5 如何从文本区域中获取选定的文本

Dov*_*Dov 3 html javascript textarea onselect selection-api

我能够通过记录 onselect 并每次存储开头和结尾来从文本区域中获取突出显示的文本。然后,当我单击按钮时,我自己构建子字符串。是否有更简单的方法来简单地查询选择?

我有点期待 html5 dom 中会有用于所有这些事情的方法,例如:

textarea.getSelectedStart() textarea.getSelectedEnd(); textArea.setSelected(开始,结束);

另外,是否有一种方法可以以编程方式取消选择文本区域中的文本?

我正在根据下面的第一个解决方案输入代码。这种方法可行,但有一个奇怪的问题:

<script language=javascript>
function replaceCLOZE(code, questionType) {
  var v = code.value;
  var s = code.selectionStart;
  var e = code.selectionEnd;
  var t = v.substr(s, e-s);
  var rep = "{:" + questionType + ":="+t+"}";
  code.value = v.substr(0,s) + rep + v.substr(e,v.length-e+1);
}

function shortAnswer(code) {
  replaceCLOZE(code, "SA");
}
function shortAnswerCaseSensitive(code) {
  replaceCLOZE(code, "SAC");
}
function multipleChoice(code) {
  replaceCLOZE(code, "MC");
}
Run Code Online (Sandbox Code Playgroud)

文本区域实际上具有属性 code.selectionStart 和 code.selectionEnd。但上面的代码现在可以工作,将屏幕上突出显示的文本设置为文本区域中的第一个单词。请注意,selectionStart 仍然是正确的,但 Firefox 中实际突出显示的内容是错误的。

在 Chrome 中它工作得很好。也许这只是 Firefox 中的一个错误,或者是否应该采取其他措施来正确更新文本区域的视觉效果?

Kam*_*war 5

以下是获取 html 文本区域选定文本的简单方法。仍然不清楚您想要什么,因为以下方法只会为您提供警报中选定的文本。

<html><head>
<script>
function alertme(){
var textarea = document.getElementById("textArea");  
var selection = (textarea.value).substring(textarea.selectionStart,textarea.selectionEnd);
alert (selection);
}

</script>

</head>
<body> 
<p><textarea class="noscrollbars" id="textArea"></textarea></p>
<button onclick="alertme()">Click me</button>
</body></html>
Run Code Online (Sandbox Code Playgroud)

当您选择文本时,该按钮将提醒您所选择的内容。SelectionStart 为您提供起点,selectionEnd 为您提供终点,而 substring 需要三个参数字符串:起点和终点。