2016-11-23 23 views
1

我有这种形式的textareabutton。如果有人在textarea中输入文本并点击按钮,我希望函数搜索是否在textarea中输入了“Tobias”,如果是,请将其替换为“Hanna”,最后将其复制到剪贴板。在点击textarea替换字符串然后复制(jQuery)

如果我在textarea的进入这个......

托比亚斯是伟大的!

...然后单击按钮;我想把它复制到剪贴板:

汉娜很棒!

但它不起作用。这是迄今为止代码:

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

嗯,不知道你创建的var/string可以选择吗? – sinisake

回答

3

你不能在一个字符串做.select()。根据the documentation,其使用限于<input type="text"><textarea>元素。

你要找也许什么是这样的:https://jsfiddle.net/6mz4qyL0/3/

$("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的值来替换文本,拷贝它,然后换了回来,完全不需要用户知道。


另外一个友好的调子......虽然没有什么语法不正确$newText变量,我个人建议丢弃$从它的名字。

使用jQuery代码块时,熟悉该语言的人很可能会认为以$为前缀的变量引用了jQuery对象/数组。在你的情况下,$newText是一个基本的string,所以它是相当欺骗。

+0

谢谢!工作就像我想要的一样!有什么方法可以添加更多我想替换的单词吗?假设我输入“Tobias很棒!”我希望输出结果是“Hanna很可爱!”,用“Hanna”替换“Tobias”,用“lovely”替换“great”。 – tobiasg

+0

是的,我真的很欣赏友好的音符。我已经在教程中看到了命名变量的方式,但显然从未理解这样做的意义。谢谢! – tobiasg

+1

很高兴我能帮到你。对于其他替换,您可以继续将它们附加到已经存在的替换。 '.replace(“Tobias”,“Hanna”)。替换(“伟大”,“可爱”)'。如果你将会有一堆这样的事情发生,你可能需要考虑将对象中的替换项列出来,以便更加简洁。 – Santi

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>

+3

我不认为OP希望文本框的值显示*替换。它看起来更像是一种欺骗:你认为你正在复制textarea,但你已经复制的内容实际上被改变以替换名字。 – Santi