如何.trim()选中的文字?

时间:2017-11-27 12:29:08

标签: javascript jquery

可能是一个非常简单的问题,但我似乎无法以某种方式解决它。

我希望能够从表中选择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复制到剪贴板

2 个答案:

答案 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'以及