selectionStart抓取String JS的早期部分

时间:2015-04-28 22:32:10

标签: javascript jquery

这是一个问题,但不是一个大问题。我问你的意思是什么?好吧,基本上我正在制作一个BBCode编辑器,我现在在高亮文本部分遇到了一些小问题。

基本上,当用户突出显示文本并点击例如Bold按钮时,它会在文本周围插入[b]和[/ b]。这一切都很好,但是有一个问题!

让我们说这是我的textarea:

Hello my name is Michael. What is your name?

注意单词' name'!现在,如果我突出显示第一个名称'单词和粗体,它正常工作。然而,如果我强调第二个名字'并尝试加粗它,它会反而加粗第一个名称'代替。

因此,如果我突出显示之前已经存在的单词,并且我尝试对其进行样式设置,它将只预先设置相同的单词。这是我的完整代码:

function getInputSelection(elem){
    if(typeof elem != "undefined"){
        start = elem[0].selectionStart;
        end = elem[0].selectionEnd;
        if (start != end) {
            return elem.val().substring(start, end);
        }
    }
    else{
        return '';
    }
}

$('input:button[name^="texteditorstylebutton"]').click(function() {
    var myTextAreaValue = $('#my_textarea').val();
    var selectedText = getInputSelection($('#my_textarea'));
    var updatedText = '['+$(this).val()+']' + selectedText + '[/'+$(this).val()+']';
    myTextAreaValue = myTextAreaValue.replace(selectedText, updatedText);
    $('#my_textarea').val(myTextAreaValue)
});

$('input:button[name^="texteditorstylebutton"], #my_textarea').on('click keyup',function(){
    var newer = $('#my_textarea').val().replace(/(\[((\/?)(b|u|i|s|sub|sup))\])/gi, '<$2>');
    $('#display').html(newer);
});

任何想法为什么会这样做?我认为这是因为SelectionStart修改谢谢,现在认为是因为replace。有什么想法吗?

0 个答案:

没有答案