Javascript 修改文本导致出现重复文本时出现问题
好的,基本上我有一个带有Javascript 修改文本导致出现重复文本时出现问题,javascript,jquery,Javascript,Jquery,好的,基本上我有一个带有textarea的表单,用户可以在其中添加内容并对所选文本应用一些bbcode 现在,我使用此函数获取所选文本: selection_get: function() { var text = ""; if (window.getSelection) { text = window.getSelection().toString(); } else if (document.selection && document.
textarea
的表单,用户可以在其中添加内容并对所选文本应用一些bbcode
现在,我使用此函数获取所选文本:
selection_get: function() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
这是正常的,唯一的问题是如果有重复的内容,例如:
你什么,你什么…
现在,假设我从上面的字符串中选择第二个youwhat
,并通过如下方式运行它:
// get the selected text
var text = selection_get();
var original_text = $('textarea').val();
var newtext = '[b]you what[/b]';
$(container).val(original_text.replace(text, newtext));
现在,newtext
将是应用bbcode的所选代码(在本例中,我们将其设置为[b]you what[/b]
)
问题是replace()
将替换所选文本的第一次出现。如何将实际选定的文本替换到其设置位置
注意:请询问我是否需要进一步澄清,问题相当模糊:-(
干杯。使用和属性并在两端添加您的BBcode
获得所选文本后,通过从textarea内容的开头到selectionStart点获取substr,并从selectionEnd到textarea内容的结尾获取选择后的追加文本,来获取前置文本
然后像这样设置textarea的值(psuedo):
此方法实际上是执行您建议的操作的唯一方法,因为它针对您选择的文本的确切部分,而不是执行replace()
在匹配文本上,如您所述,它将替换第一次出现的内容,而不是您选择的内容。在类似hello
的文本块中,如果您选择第四个hello
则您的代码将替换第一个hello
编辑:用一个例子来说明这个想法:
function getSelected() {
var editor = $('textarea');
var u = editor.val();
var start = editor.get(0).selectionStart;
var end = editor.get(0).selectionEnd;
return [u.substring(0, start), u.substring(end), u.substring(start, end)];
}
$('#ButtonToAddBBCode').click(function(e) {
e.preventDefault();
var bits = getSelected();
var bb = ['[b]', '[/b]']; // your example BB code
$('textarea').val(bits[0] + bb[0] + bits[2] + bb[1] + bits[1]);
});
你肯定想看看这个。用一个直接的替换是不够健壮的。几乎完全是你想要的。Tim Down在这里的某个地方,如果你在你的问题中添加Rangy作为标签,他可能会评论…谢谢你花时间回答这个问题。这正是我需要的:)
function getSelected() {
var editor = $('textarea');
var u = editor.val();
var start = editor.get(0).selectionStart;
var end = editor.get(0).selectionEnd;
return [u.substring(0, start), u.substring(end), u.substring(start, end)];
}
$('#ButtonToAddBBCode').click(function(e) {
e.preventDefault();
var bits = getSelected();
var bb = ['[b]', '[/b]']; // your example BB code
$('textarea').val(bits[0] + bb[0] + bits[2] + bb[1] + bits[1]);
});