2017-11-27 6 views
2

かなり簡単な質問かもしれませんが、何とか解決できないようです。選択したテキストを.trim()する方法は?

テーブルから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'); 
}); 

は、悲しいことに、これはまだその背後にあるタブでコピーしたテキストを返します。パスワードフィールドにパスワードをコピーしようとすると、実際には迷惑になります。なぜなら、ユーザーはドット付きパスワードにタブがあるのを見ることができないからです。

誰かが助けてくれることを祈っています。

EDIT:

私は少し受け入れ答えを変更し、もう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(); 
}); 

すべてのクリックはあなたがjQueryのように、使用のjQueryのバージョンでサポートされているすべてのブラウザで動作するはずですどの$.trim()

$.trim(window.getSelection().toString()) 

を使用していクリップボード

+0

が働いているはず何 –

+0

これで選択するために知ってそうでない場合は、そのハード、あまりにもあなたのHTMLマークアップを追加します。しかし、代わりに、あなたは 'str.replace(\(^ \ s | \ s $)/、 '')' – Rajesh

+0

@ MasterYodaを試すことができます。選択はtd要素上にありますので$( 'td') –

答えて

2

にクリックされたTD-セルをコピーします。

$ .trim()関数は、指定された文字列の先頭と末尾にあるすべての改行、スペース(改行なしのスペースを含む)、およびタブを削除します。

もつとも: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>

+0

がそれを試みましたが、まだタブをコピーしています。 document.execCommand( 'copy')が最後の変数をコピーしていない可能性がありますか? –

+0

選択した文字列の代わりに実際に文字列をコピーするように更新されました。 – mplungjan

+0

これは機能しますが、選択したテキストはすぐに自動的に選択解除されます。そして、btw、私はバグがあった問題ですか? –

-1

あなたはそれが魔法を行いますreplace('\t',''); を使用することができ、文字列からタブを削除します。

が、私はトリム、ホワイトスペース「\ n」をオフに取り除く知っているようには「\ t」の同様

+0

通常これはうまくいくが、この状況ではうまくいかない。 –

+0

自分自身を説明してください –

+0

私はあなたが正しいと信じています。ここの問題は、document.execCommand( 'copy')メソッドがreplaceまたは.trim()を使用して操作をコピーしなかったため、タブを置き換えられなかったことです。 @mplungjan btwからの答えを見てください私はあなたに落としたものではありません –

関連する問題