单击时替换textarea中的字符串然后复制(jQuery)

时间:2016-11-23 21:10:38

标签: javascript jquery html

我的表单中包含textareabutton。如果有人在textarea中输入文本并单击该按钮,我希望该函数能够搜索" Tobias"进入textarea,如果是,请用" Hanna"最后将其复制到剪贴板。

如果我在textarea中输入...

  

托比亚斯很棒!

...然后点击按钮;我希望将其复制到剪贴板:

  

汉娜很棒!

但它不会奏效。这是到目前为止的代码:

$("button").click(function(){
var $textArea = $("textarea");
var $newText = $textArea.val().replace("Tobias", "Hanna");
    $newText.select();
    document.execCommand('copy');
});

2 个答案:

答案 0 :(得分:3)

您无法对字符串执行.select()。根据{{​​3}},其使用仅限于<input type="text"><textarea>元素。

也许您正在寻找的是这样的:the documentation

$("button").click(function(){
    var $textArea = $("textarea");
    var oldText = $textArea.val();
    var newText = oldText.replace("Tobias","Hanna");
    $textArea.val(newText).select();
    document.execCommand('copy');
    $textArea.val(oldText);
});

这会将textarea值更改为替换文本,复制它,然后将其更改回来,所有这些都不需要用户知道。

另外作为一个友好的说明...虽然<{1}}变量没有语法不正确,但我个人建议从名称中删除$newText

使用jQuery代码块时,那些熟悉该语言的人很可能会认为前缀为$的变量是指jQuery对象/数组。在您的情况下,$是基本$newText,因此非常具有欺骗性。

答案 1 :(得分:1)

您需要缓存原始值,然后将新值放入可选择的元素中,以便您可以复制所选文本。然后你可以放回原始文本。

$("button").click(function(){
  var original = $("textarea").val();
  var updated = $("textarea").val().replace("Tobias", "Hanna");
  $("textarea").val(updated);
  $("textarea").select();
  document.execCommand('copy');
  $("textarea").val(original);
});
input[type=text] { height:1px, width:1px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea>Tobias is great</textarea>
<button>Click Me</button>