如何在jQuery中替换我选择的文本?

如何在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

如何替换html文本区域中的选定文本

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