5

ユーザーが編集可能な div に貼り付けられるようにする必要があります (ユーザーが選択したものは何でも: 右クリックして貼り付ける、ショートカット キーなど) が、書式設定を破棄してプレーン テキストのみを取得したいと考えています。

ユーザーが開始したイベントによって適用された場合、div は基本的な書式設定 (太字と斜体) を許可するため、テキストエリアを使用できません。

このonbeforepasteイベントは有望に見えましたが、quirksmode によると、サポートが非常に限られているため使用できません。

4

4 に答える 4

1

Ctrl+についてvは、キーアップで編集可能なdivの内容を確認しました。そのイベントの内容を変更できます。私はniceditテキストエディタを使用していました。これは、右クリック->貼り付けからの貼り付けでは機能しませんでした。「貼り付け」の場合、を使用してコンテンツを変更する必要がありましたsettimeout

.addEvent('paste', function(e) {
        setTimeout(function(){
            if(condition){
                //modify content
            }
        },350);
    });
于 2012-05-10T19:34:16.703 に答える
1

これはトリッキーですが、不可能ではありません。できることは非常に複雑で、Firefox 2 以降、IE 5.5 以降、および Safari 4 や Chrome などの最近の WebKit ブラウザー (古いバージョンではテストされていません) で機能するちょっとしたハックです。TinyMCE と CKEditor の両方の最近のバージョンは、iframe ベースのエディターでこの手法を使用しています。

  1. keypress イベント ハンドラーを使用して ctrl-v / shift-ins イベントを検出する
  2. そのハンドラーで、現在のユーザー選択を保存し、テキストエリア要素を画面外 (左 -1000px など) にドキュメントに追加し、contentEditable をオフにして、テキストエリアで focus() を呼び出し、キャレットを移動し、ペーストを効果的にリダイレクトします。
  3. イベント ハンドラーに非常に短いタイマー (たとえば 1 ミリ秒) を設定して、textarea の値を格納し、ドキュメントから textarea を削除し、contentEditable をオンに戻し、ユーザーの選択を復元してテキストを貼り付ける別の関数を呼び出します。

これは、キーボードの貼り付けイベントでのみ機能し、コンテキストまたは編集メニューからの貼り付けでは機能しないことに注意してください。イベントはより良いものになりますが、pasteイベントが発生するまでに、キャレットをテキストエリアにリダイレクトするには遅すぎます (少なくとも一部のブラウザーでは)。

于 2010-08-24T08:18:06.640 に答える
1

また、javaScript を使用してハッキングすることもできます。お役に立てれば

ここに例を作成しました

<div contentEditable="true" id="clean-text-div"> </div>
<div id="clean-btn"> Clean Me</div>
<div id="message"> paste html content and clean background HTML for pure text</div>


$("#clean-btn").click(function(){
    $("#clean-text-div").text($("#clean-text-div").text());
    $("#message").text("Your text is now clean");
});
于 2014-01-17T15:18:05.533 に答える
0

「貼り付け」や「入力」などのイベントは試しましたか?次に、正規表現を使用してすべてのhtmlタグをトリップできます

$(document).bind('paste', function(e){ alert('pasting!') })

http://www.hscripts.com/scripts/JavaScript/remove-html-tag.php

貼り付けイベントについての議論もあります。こちらもお読みください:
Catch paste input

于 2010-08-24T05:57:04.913 に答える