Jquery 向文本框值添加格式标记

Jquery 向文本框值添加格式标记,jquery,Jquery,在我的表单中,我希望允许用户格式化文本和添加列表等(基本的html功能,而无需了解html) 以粗体按钮为例: <div class="goBold button">B</div> <input type="text" name="txtMessage" /> <script> $(".goBold").click(function() { formatText("bold"); }); function formatText(forma

在我的表单中,我希望允许用户格式化文本和添加列表等(基本的html功能,而无需了解html)

以粗体按钮为例:

<div class="goBold button">B</div>
<input type="text" name="txtMessage" />
<script>
$(".goBold").click(function() {
    formatText("bold");
});

function formatText(formatType)
{
    var input = $("#txtMessage");
    var text = input.val();
    var ss = input[0].selectionStart;
    var se = input[0].selectionEnd;

    if (formatType == "bold")
    {
        if (ss == se)
        {
            // there's no text in the textbox, so just write in the tags
            input.val(text + "[b][/b]");
        }
        else
        {
            // surround the highlighted text with the tags
            input.val(text.substr(0, ss) + "[b]" + text.substr(ss, se) + "[/b]" + text.substring(se, text.length));
        }
    }
}
</script>
B
$(“.goBold”)。单击(函数(){
格式文本(“粗体”);
});
函数formatText(formatType)
{
var输入=$(“#txtMessage”);
var text=input.val();
var ss=输入[0]。选择开始;
var se=输入[0]。选择结束;
如果(formatType==“粗体”)
{
if(ss==se)
{
//文本框中没有文本,所以只需在标记中写入即可
input.val(文本+“[b][/b]”);
}
其他的
{
//用标记环绕突出显示的文本
input.val(text.substr(0,ss)+“[b]”+text.substr(ss,se)+“[/b]”+text.substring(se,text.length));
}
}
}
虽然所有这些都有效,但有一个小问题:

假设此文本框的文本值为

敏捷的红狐跳过懒惰的棕色狗。这是英语中唯一使用全部26个字母的句子

突出显示单词
所有26个字母
,单击粗体按钮会将文本包装在标记中,但也会添加选择后存在的文本的第二个副本

我不知道这是为什么,有人能提供一些见解吗


TIA:)

您应该在任何地方使用
子字符串:

input.val(text.substring(0, ss) + 
          "[b]" + text.substring(ss, se) + "[/b]" + 
          text.substring(se, text.length));

(顺便说一句,您的选择器应该是
$(“input[name=txtMessage]”)
-它没有id)。

substr使用两个参数-start和length。使用第二个参数作为结束位置,而不是长度

text.substr(0, ss) + "[b]" + text.substr(ss, se-ss) + "[/b]" + text.substring(se)
上述代码将正确定位[b]标签


或者,substring(而不是substr)采用start和end参数,而不是start和length

这是选择器上的一个好注意,但这只是我在编写代码时的一个输入错误哈哈,我会很好地解决这个问题的,谢谢:)只是,我想我需要更改默认值(无选择)这样,它就可以在文本框中用户当前位置的任何位置插入标签(闪烁的管道,lol,不知道它叫什么),尽管我不知道该怎么做,但事实证明这比预期的要容易:)耶