这是一个问题,但不是一个大问题。我问你的意思是什么?好吧,基本上我正在制作一个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
。有什么想法吗?