如何在jQuery中替换我选择的文本?
如何替换html文本区域中的选定文本如何在jQuery中替换我选择的文本?,jquery,Jquery,如何替换html文本区域中的选定文本 mardagz至[b]mardagz[\b] 这是我的代码,但不起作用 function getSelectedText(){ if(window.getSelection){ return window.getSelection().toString(); } else if(document.getSelection){ return document.getSelection(); } else if(document.s
mardagz
至[b]mardagz[\b]
这是我的代码,但不起作用
function getSelectedText(){
if(window.getSelection){
return window.getSelection().toString();
}
else if(document.getSelection){
return document.getSelection();
}
else if(document.selection){
return document.selection.createRange().text;
}}
function bbrep(start, end){
$("#pPost").val($("#pPost").val().replace(getSelectedText(), start + getSelectedText() + end))};
钥匙
有人对此有想法吗?:) 这是有效的:
function bbrep(start, end) {
var str = $("#pPost").val();
var word = "bar";//getSelectedText();
var re = new RegExp("(\\b" + word + "\\b)", "ig");
$("#pPost").val(str.replace(re, start + "$1" + end));
};
然而,我不得不硬编码一个字符串,因为您的getSelectedText()
方法不返回任何内容
编辑:
使用.mousedown
当
。单击时,文本不再被选中。这里是一个完整的测试和工作示例
function getSelectedText() {
var len =$("#pPost").val().length;
var start = $("#pPost")[0].selectionStart;
var end = $("#pPost")[0].selectionEnd;
var sel = $("#pPost").val().substring(start, end);
return sel;
}
function bbrep(start, end){
var tmpVal = getSelectedText();
$("#pPost").val($("#pPost").val().replace(tmpVal, start + tmpVal + end));
}
})
下面是html代码snipet
<textarea rows="2" cols="20" id="pPost">mardagz
</textarea>
<input type="button" id="bbbold" value="clcikMe" />
mardagz
这里是我刚刚做的一个JSFIDLE示例
另一个也考虑了索引的JSFIDLE,好的,我必须重新构建它才能使用我的asp.net控件。尽可能简单地考虑一下。这个词将替换所选的词,而不是在其他词中找到的第一个词
只要确保你给它你文本框的ID
您可以这样调用函数makeBBCode(“[b]”,“[/b]”)。我使用OnClientClick在asp图像按钮上调用它。[例如:OnClientClick='makeBBCode(“[b]”,“[/b]”]
String.prototype.insertAt=函数(索引,字符串){
返回this.substr(0,索引)+字符串+this.substr(索引);
}
函数makeBBCode(开始、结束){
var txtBox=document.getElementById(“此处的对象Id”)
txtBox.value=txtBox.value.insertAt(txtBox.selectionEnd,end).insertAt(txtBox.selectionStart,start);
}
为了以防万一有人稍后来这里,我将根据上面所说的内容,分享我在一些研究后发现的解决方案。我正在寻找一种解决方案,可以替换我要求替换的内容(而不是文本区域中的某个地方的相同子字符串),并在插入的文本末尾保留焦点
以下是我得出的解决方案:
function text_with_insert(str, index, value) {
return str.substr(0, index) + value + str.substr(index);
}
function surround_sel_text( str_start, str_end ) {
var el = $("#pPost");
var focus_idx = el[0].selectionEnd + str_start.length + str_end.length;
var text_with_end_insert = text_with_insert( el.val(), el[0].selectionEnd, str_end );
el.val( text_with_insert( text_with_end_insert, el[0].selectionStart, str_start ) );
el[0].selectionStart = focus_idx;
el[0].selectionEnd = focus_idx;
}
$("#bbbold").on('mousedown' ,function() {
surround_sel_text( '[b]', '[/b]' );
event.preventDefault();
});
您可以使用:
https://github.com/timdown/rangyinputs
只需调用:replaceSelectedText
首先查看getSelectedText()
是否返回任何内容。仍然一样。。。broo为什么我们的getSelectedText方法在google chrome.owhh中似乎没有返回任何内容,我想是的,但是你有任何功能来修复这个bro吗?:)无论如何,iv'e添加了这个$(this.live('mouseup',function(){selection=getSelectedText();})代码>有一个结果,但是再次用[b]mardagz
代替[b]mardagz[/b]
。。。使用mousedown
而不是mouseup
或单击
你必须在选择消失之前捕捉到它。噢,我得到了,兄弟:)嗨,我刚刚生成了新函数:)嗨,无论如何,非常感谢……)应注意,这将始终替换所选文本的第一次出现,而不一定是所选文本。IE:试着替换mardagz中的第二个“a”或abracadbra中的众多“a”中的一个…@ChrisKerekes,因为你所要做的只是一个更好的替换,一个考虑到索引的替换,看一看
function text_with_insert(str, index, value) {
return str.substr(0, index) + value + str.substr(index);
}
function surround_sel_text( str_start, str_end ) {
var el = $("#pPost");
var focus_idx = el[0].selectionEnd + str_start.length + str_end.length;
var text_with_end_insert = text_with_insert( el.val(), el[0].selectionEnd, str_end );
el.val( text_with_insert( text_with_end_insert, el[0].selectionStart, str_start ) );
el[0].selectionStart = focus_idx;
el[0].selectionEnd = focus_idx;
}
$("#bbbold").on('mousedown' ,function() {
surround_sel_text( '[b]', '[/b]' );
event.preventDefault();
});
https://github.com/timdown/rangyinputs