【问题标题】:How to wrap selected text in a textarea?如何将选定的文本包装在文本区域中?
【发布时间】:2010-12-15 07:22:15
【问题描述】:

如何获取用户选择的文本(就在 textarea 内)并对其应用操作,例如包装选择 [#bold]selected text[/bold]

【问题讨论】:

    标签: jquery textarea


    【解决方案1】:

    以 Soufiane 发布的内容为基础,以下是转换为 jquery 的代码,能够传递打开和关闭标签:

    function wrapText(elementID, openTag, closeTag) {
        var textArea = $('#' + elementID);
        var len = textArea.val().length;
        var start = textArea[0].selectionStart;
        var end = textArea[0].selectionEnd;
        var selectedText = textArea.val().substring(start, end);
        var replacement = openTag + selectedText + closeTag;
        textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));
    }
    

    用法如下:

    wrapText("myTextArea", "[#bold]", "[/bold]");
    

    【讨论】:

    • 如果有人想要它,这里是这个函数的咖啡脚本版本:gist.github.com/2938205
    • 如果最终选择的文本包括插入,而不仅仅是初始选择,那就太好了。或者也许将插入符号跳到新字符串的末尾...
    • 好的,这可以解决问题textArea[0].selectionEnd = end + openTag.length + closeTag.length;(在最后一行之后)。
    • 为了防止在未选择文本时将包装器添加到文本区域的开头,请将@richleland 的最后一行包装起来,如下所示:if(selectedText != 0) {textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));}
    【解决方案2】:
    function wrapAsLink(url){
      var textarea = document.getElementById("myTa");
      var len = textarea.value.length;
      var start = textarea.selectionStart;
      var end = textarea.selectionEnd;
      var sel = textarea.value.substring(start, end);
      var replace = '<a href="'+url+'">' + sel + '</a>';
      textarea.value = textarea.value.substring(0,start) + replace +
      textarea.value.substring(end,len);
    }
    

    这个功能可以帮助你做你想做的一些调整。我找到了here

    【讨论】:

      猜你喜欢
      • 2012-05-05
      • 2012-05-14
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多