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

3

通过记录onselect并每次存储开始和结束位置,我能够从textarea中获取高亮文本。然后,当我点击一个按钮时,我自己构建子字符串。难道没有更简单的方法来查询所选内容吗?

我有点期望在html5 dom中会有所有这些方法,类似于:

textarea.getSelectedStart() textarea.getSelectedEnd(); textArea.setSelected(start,end);

还有一种方法可以以编程方式取消textarea中的文本选择吗?

我正在根据下面的第一个解决方案放置代码。这样做有点奇怪的问题:

<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");
}

在Chrome中,它可以正常工作。也许这只是Firefox中的一个错误,或者还有其他需要做的事情才能正确更新文本区域的外观?

1个回答

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>

当您选择文本时,按钮将向您提示您所选择的内容。selectionStart给您起始点,selectionEnd给您结束点,而substring需要三个参数:字符串、起始点和结束点。


当我在Firefox中尝试时,它可以正确获取selectionStart和end,但是神奇地突出显示了另一个单词。<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); } 调用上述例程后,缓冲区中的第一个单词会被突出显示。我不明白为什么。选择仍然正确,但在视觉上却是错误的! - Dov
无法理解代码,我不使用Firefox,但刚下载了28.0版本,并将上述代码粘贴到新的HTML文件中,它完美地运行。因此,代码可能有问题,否则解决方案完美地运行,请在评论中使用“code”标记放置代码。 - Kamal Panhwar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接