Javascript 更新输入值时如何保持光标位置

Javascript 更新输入值时如何保持光标位置,javascript,innerhtml,Javascript,Innerhtml,我正在开发“添加评论框”,其中包含一些功能,如将[b]text[/b]更改为粗体文本等等。问题是当javascript中的str.replace操作完成时,位于写入区域的光标返回到起始位置 $('#comment').keyup(function () { var str = document.getElementById("comment").innerHTML; if (str.indexOf('[b]') >= 0 && str.indexOf('[/

我正在开发“添加评论框”,其中包含一些功能,如将
[b]text[/b]
更改为粗体文本等等。问题是当javascript中的str.replace操作完成时,位于写入区域的光标返回到起始位置

$('#comment').keyup(function () {
    var str = document.getElementById("comment").innerHTML;
    if (str.indexOf('[b]') >= 0 && str.indexOf('[/b]') >= 0) {
        var start_pos = str.indexOf('[b]') + 3;
        var end_pos = str.indexOf('[/b]', start_pos);
        var text_to_get = str.substring(start_pos, end_pos)
        res = str.replace("[b]" + text_to_get + "[/b]", "<b>" + text_to_get + "</b>");
        document.getElementById("comment").innerHTML = res;
    }
});
$('#comment').keyup(函数(){
var str=document.getElementById(“comment”).innerHTML;
如果(str.indexOf('[b]')>=0&&str.indexOf('[/b]')>=0){
var start_pos=str.indexOf('[b]')+3;
var end_pos=str.indexOf(“[/b]”,start_pos);
var text_to_get=str.substring(开始位置,结束位置)
res=str.replace(“[b]”+text_to_get+“[/b]”,“+text_to_get+”);
document.getElementById(“comment”).innerHTML=res;
}
});

您是否尝试将焦点放回元素上?通常,浏览器(IE除外)会在光标重新聚焦后将光标放回其原始位置。因为您使用的是jquery:


$(“#yourID”).focus()

我认为您应该使用lexter/解析器来将bbcode转换为HTML(除非原因是您想边做边学)

。它支持默认的bbcode块,并使您可以定义自己的块

<head>
  <!-- Optional styling for .xbbcode-* classes -->
  <link rel="stylesheet" type="text/css" href="xbbcode.css">
</head>
<body>
  <script src="xbbcode.js"></script>
  <script>
    var text = document.getElementById("comment").innerHTML;
    var result = XBBCODE.process({
      text: text,
      removeMisalignedTags: false,
      addInLineBreaks: false
    });
    console.error("Errors", result.error);
    console.dir(result.errorQueue);
    console.log(result.html);  //=> <span class="xbbcode-b">Hello world</span>
  </script>
</body>

var text=document.getElementById(“comment”).innerHTML;
var result=XBBCODE.process({
文本:文本,
移除未对齐的标记:false,
addInLineBreaks:错误
});
控制台错误(“错误”,结果错误);
console.dir(result.errorQueue);
console.log(result.html);//=>你好,世界

这不是关于
str.replace
的问题,但是
innerHTML
的行为有帮助吗?可能重复