可能是一个非常简单的问题,但我似乎无法以某种方式解决它。
我希望能够从表中选择td元素内的文本。问题是文本中有一个我想要摆脱的标签。
到目前为止我试过这个:
function getSelectionText(){
var selectedText = ""
if (window.getSelection){ // all modern browsers and IE9+
selectedText = window.getSelection().toString().trim()
}
return selectedText
}
$('td').click(function(){
var selected = getSelectionText();
document.execCommand('copy');
});
遗憾的是,这仍然会返回复制的文本,后面有一个标签。尝试将密码复制到密码字段时,这真的很烦人,因为用户无法看到虚线密码中有选项卡。
希望有人可以提前帮助,谢谢!编辑:
我稍微改变了接受的答案,不再需要getSelectionText()函数了。希望这可以帮助有同样问题的人。
$('td').click(function(){
var selected = $(this).html();
var inp = $("<input/>",{id:"copySelected"});
$("body").append(inp)
inp.val(selected);
inp[0].select();
document.execCommand('copy');
inp.remove();
});
每次点击都会将点击的td-cell复制到剪贴板
答案 0 :(得分:2)
你有jQuery所以使用$.trim()
$.trim(window.getSelection().toString())
应该适用于您使用的jQuery版本支持的所有浏览器。
$。trim()函数从提供的字符串的开头和结尾删除所有换行符,空格(包括不间断空格)和制表符。
HOWEVER :execCommand副本使用选定的字符串而不是复制的字符串并由您更改。
您需要更改所选范围或在复制之前将操纵的字符串复制到别处。
这里我创建一个临时字段来保存被复制的字符串。
function getSelectionText(){
var selectedText = ""
if (window.getSelection){ // all modern browsers and IE9+
selectedText = $.trim(window.getSelection().toString());
}
return selectedText;
}
$('td').click(function(){
var selected = getSelectionText();
console.log(selected.length,selected,encodeURIComponent(selected))
var inp = $("<input />",{id:"copySelected"});
$("body").append(inp)
inp.val(selected);
inp[0].select();
document.execCommand('copy');
inp.remove();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<table><tbody><tr><td>Here is some text with trailing tabs </td><td>|Next cell</td></tr>
</table>
<textarea>Paste the 36 chars (47 with tabs) in after clicking</textarea>
答案 1 :(得分:-1)
从字符串中删除标签,您可以使用replace('\t','');
它会做神奇的事。
但是我知道修剪掉白色空间'\ n''\ t'以及