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