【发布时间】:2017-08-30 20:02:40
【问题描述】:
我正在制作一个 Web 应用程序来测试正则表达式。我有一个输入,我在其中输入正则表达式和一个 contenteditable pre 元素,我在其中输入找到并突出显示匹配项的文本。
示例:假设正则表达式为 ab,如果用户在 pre 元素中键入 abcab,则正则表达式和文本都会发送到我实现的 api 并返回
<span style='background-color: lightgreen'>ab</span>c<span style='background-color: lightgreen'>ab</span>
并且这个字符串被设置为前元素的innerHTML
每次用户编辑前置元素的内容时都会执行此操作(确切地说是keyup事件)。我遇到的问题(希望你能解决)是每次设置 interHTML 时,插入符号都放在开头,我希望它放在 de 用户输入的最后一个字符之后。关于如何知道插入符号的放置位置以及如何将其放置在所需位置的任何建议? 谢谢。
更新为了更好地理解......一个明确的案例: 正则表达式是 ab 并且在我们拥有的 contenteditable 元素中:
<span style='background-color: lightgreen'>ab</span>c<span style='background-color: lightgreen'>ab</span>
然后我在第一个 a 和第一个 b 之间输入一个 c,所以现在我们有了:
acbc<span style='background-color: lightgreen'>ab</span>
此时插入符号已经回到 contenteditable 元素的开头,它应该放在我输入的 c 之后。这就是我想要实现的目标,希望现在更清楚。
更新2
function refreshInnerHtml() {
document.getElementById('textInput').innerHTML = "<span style='background-color: lightgreen'>ab</span>c<span style='background-color: lightgreen'>ab</span>";
}
<pre contenteditable onkeyup="refreshInnerHtml()" id="textInput" style="border: 1px solid black;" ></pre>
【问题讨论】:
-
我做了,但我的情况似乎更复杂,请查看我的更新。
标签: javascript html