0

在我的表单中,我希望允许用户格式化文本并添加列表等(基本的 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>

虽然所有这些都有效,但有一个小问题:

让我们假设这个文本框的文本值为

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

突出显示单词all 26 letters后,单击粗体按钮会将文本包装在标签中,但它还会添加选择后存在的文本的第二个副本。

我不确定这是为什么,有人可以在这里提供任何见解吗?

蒂亚:)

4

2 回答 2

1

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

text.substr(0, ss) + "[b]" + text.substr(ss, se-ss) + "[/b]" + text.substring(se)

上面的代码将正确定位 [b] 标签。

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

于 2012-11-28T12:04:24.100 回答
0

你应该substring在任何地方使用:

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

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

于 2012-11-28T12:03:47.687 回答