2016-07-28 2 views
0

this answer(2番目のオプション)のコードを使用して、コピーする内容にテキストを追加することができました。しかし、文字列の連結を変更してreplaceへの呼び出しを追加すると、 "replace is a function"というエラーが表示されます。Javascript/jQueryを使用してクリップボードに送信する前にコピーされているテキストを検索/置換する方法は?

copytext = window.getSelection().replace(/some pattern/, 'replace value'); // Fails 

「選択」オブジェクトは非常に複雑なようで、その中のテキストを見つけることさえできません。私はそれにtoStringを呼び出すことができますが、私はcontenteditable divからHTMLをコピーしているので、それはオプションではないので、私は書式を保持する必要があります。

私はdivのコンテンツに相対リンクがあり、何らかの理由でコピーされたテキストの絶対リンクに変換されているため、これを実行しようとしています。これはrawgitからmy demoにアクセスする場合にのみ発生します。ローカルでは正常に動作します。

私はこれをどのように達成することができますか?あなたは(Selectionオブジェクトを返しますgetSelection())文字列にキャストする必要がhttps://jsfiddle.net/8kx8v8pb/

+1

'+'オペレータがちょうどオブジェクトを文字列に強制的に変換するのに役立ちます願っています。明示的に '.toString()'を呼び出す(または '+" "で偽装) – blgt

+0

'第2のオプション ' - あなたはIEに興味がありますか? –

+0

http://stackoverflow.com/questions/4176923/html-of-selected-text/4177234#4177234選択オブジェクトからhtmlを取得する方法を示します。 – jHilscher

答えて

0

UPDATE

は、ここに私の現在の設定とjsfiddleです。 だから、どちらか「」を追加したり、あなたのケースでそう.replace()

を実行する前に.toString()で文字列にキャストし、コードは次のようにする必要があります:

copytext = (window.getSelection() + "").replace(/some pattern/, 'replace value'); 

または

copytext = (window.getSelection().toString()).replace(/some pattern/, 'replace value'); 

出典:https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection

+0

この問題は、コピーされているコンテンツのフォーマットがすべて失われていることです。より明示的に言えば、リンクなどを含むリッチテキストのcontenteditable divがあります。もし私が 'toString'を使うと、私はそれをすべて失います。 – Ariel

0

selectionはオブジェクトなので、そのテキストにreplace関数を実行したい場合はfo遅くなっている。

window.getSelection().anchorNode.data.replace(/some pattern/, 'replace value'); 

私は、これは

+0

これは機能しますが、選択した項目の最初の要素に対してのみ機能します。私の選択は複数のノードを持っています。私はそれらをループしてそれぞれに 'replace'を適用できると思いますか?私が言ったように、私はjavascriptの選択の構造に精通していないので、私はノードを通してループするような何かをしようとするのは苦労しているので、援助は高く評価されます。 – Ariel

+0

ここに完全なコードを投稿できますか?あなたがこれのためにjsfiddleを作ることができるなら、それは素晴らしいことでしょう。 – localhost

関連する問題