Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript/jQuery在textarea中重新选择所选文本?_Javascript_Jquery_Html - Fatal编程技术网

如何使用javascript/jQuery在textarea中重新选择所选文本?

如何使用javascript/jQuery在textarea中重新选择所选文本?,javascript,jquery,html,Javascript,Jquery,Html,我正在使用javascript和jQuery设计一个注释框 我的页面有一个文本区域和3个按钮(粗体、下划线和斜体)。如果用户在文本区域中键入文本,选择并单击任何按钮,所选文本应为粗体、下划线或斜体(我在下面有此功能) 我的问题是,在单击选中文本的按钮后,尽管正确插入了html标记,但选择丢失。也就是说,当我键入“你好,我在这里”时,选择“我在这里”并单击粗体按钮我在这里变为粗体,但如果我还想加下划线或斜体,我必须重新选择文本 因此,我的问题是:如何在文本区域中重新选择所选文本 我尝试了myTex

我正在使用javascript和jQuery设计一个注释框

我的页面有一个
文本区域和3个按钮(粗体、下划线和斜体)。如果用户在文本区域中键入文本,选择并单击任何按钮,所选文本应为粗体、下划线或斜体(我在下面有此功能)

我的问题是,在单击选中文本的按钮后,尽管正确插入了html标记,但选择丢失。也就是说,当我键入“你好,我在这里”时,选择“我在这里”并单击粗体按钮我在这里变为粗体,但如果我还想加下划线或斜体,我必须重新选择文本

因此,我的问题是:如何在
文本区域
中重新选择所选文本

我尝试了
myTextarea.select()
,但此代码将选择
textarea
的全部内容,而不仅仅是所选文本

更新:

以下是我到目前为止得到的信息:

var mystring = ""; // default string

/* Bold event */
function Bold()
{
  var startString;
  var endString;
  var startPos; // starting position
  var endPos; // ending position
  var selectedText;
  var temp = document.getElementById("myTextarea");

  // check if text is selected
  if(temp.selectionStart !== undefined)
  {
    startPos = temp.selectionStart;
    endPos = temp.selectionEnd;
    selectedText = temp.value.substring(startPos, endPos);
    startString = temp.value.substring(0, startPos);
    endString = temp.value.substring(endPos, temp.value.length);
  }

  $("#myTextarea").val(startString + "[B]" + selectedText + "[/B]" + endString); // rewrite textarea value

  if(mystring !== "") // check if default string is NOT null, return null if it's the first clicked
  {
    mystring = mystring.replace(selectedText, "<b>" + selectedText + "</b>");
  }
  else
  {
    mystring = startString + "<b>" + selectedText + "</b>" + endString;
  }

  // write to preview panel
  $("#preview").html(mystring);
  $("#myTextarea").focus();
}
var mystring=”“;//默认字符串
/*大胆的事件*/
函数Bold()
{
var启动串;
变量结束字符串;
var startPos;//起始位置
var endPos;//结束位置
var选择文本;
var temp=document.getElementById(“myTextarea”);
//检查是否选择了文本
如果(临时选择开始!==未定义)
{
startPos=temp.selectionStart;
endPos=温度选择结束;
selectedText=温度值子字符串(startPos、endPos);
startString=温度值子字符串(0,startPos);
endString=温度值子字符串(endPos,温度值长度);
}
$(“#myTextarea”).val(startString+”[B]“+selectedText+”[B]“+endString);//重写textarea值
if(mystring!==“”)//检查默认字符串是否不为null,如果是第一次单击,则返回null
{
mystring=mystring.replace(selectedText,“+selectedText+”);
}
其他的
{
mystring=startString+“”+selectedText+“”+endString;
}
//写入预览面板
$(“#预览”).html(mystring);
$(“#myTextarea”).focus();
}

当我在
文本区域中选择“我在这里”并单击粗体按钮时,上面的代码将在
文本区域中插入
[B]
[/B]
,并在预览面板中插入
标记。

要重新选择文本,可以执行以下操作:

temp.setSelectionRange(startPos, endPos + 6);

我添加了
+6
,因为您要插入6个新字符,所以我将扩展选择以包括它们。您还可以将3添加到
startPos
endPos
(并让字符包装所选内容)-这是一种低级用户体验。

您可以使用
selection/Range
API来读取和修改当前所选内容。如果您在文本区域中,并且希望保留一个select,我想您可以保存并重置this.selectionStart和this.selectionEnd。如果您仍然需要帮助,请告诉我们您已经做了什么。@jcunod我已经更新了我的问题。请再读一遍并帮助我。非常感谢。