从 textarea 中获取具有位置的选定字符串,尽管它存在多次

Get the selected string with position from textarea although it exists multiple times

function addURL(e) {
    var n = document.selection ? document.selection.createRange().text : e.value.substring(e.selectionStart, e.selectionEnd);
    var a = n + '[link]';
    e.value = e.value.replace(n, a);
}
<input type="button" value="Add URL" onclick="addURL(text)">

<br><br>

<textarea id="text">This is a test. This is a test. This is a test.</textarea>

请运行我的代码片段。 Select/activate/highlight 文本区域中的任何 word/string 并按 Add link 按钮。

如果你select test 在文本区域中并按下 Add link 按钮,它会将 [link] 附加到 test.

此方法运行良好,但前提是文本区域中只有一个 test:使用第二句中的 test 再试一次。您会看到,[link] 将被添加到文本区域中的第一个 test 而不是添加到 selected 的

我该如何解决?

那是因为您使用 replace 将仅替换所有匹配值的第一个实例。您需要使用 substring

function addURL(e) {
  var n = window.selection ? window.selection.createRange().text : e.value.substring(e.selectionStart, e.selectionEnd);
  var a = n + '[link]';
  e.value = e.value.substring(0, e.selectionStart) + a + e.value.substring(e.selectionEnd, e.value.length);
}
#text {
  width: 150px;
  height: 50px;
}
<input type="button" value="Add URL" onclick="addURL(text)">

<br><br>

<textarea id="text">This is a test. This is a test. This is a test.</textarea>