2011-08-16 7 views
1

フォーラムメッセージを送信するために私のサイトに編集可能なdivがあります。 人がメッセージを編集(太字、斜体、下線、リンクなどを追加)divとoncopyのためのHTMLタグonpasteも除外

しかし、ときいくつかのいずれかのペーストまたはドロップ私がしたいことができます( - ドロップは必要ありませんが、それはあるペースト)thierテキストを私はそれが行きたいですHTMLタグを除いたdiv内にあります。 - きれいな、ただのテキスト。 (ある人が単語をつけて200ポイントのテキストを作って、コピーして&をdivに貼り付けると、彼は非常に異なったメッセージを持っています。

どのようにHTMLタグを削除してDIVに貼り付けるためにクリップボードから来るテキストをスキャンできますか?

<html> 
<head> 
<script type="text/javascript" language="javascript"> 

function PasteFilter() 
{ 
//windows.clipboardData filter on paste to go here 
} 

function CopyFilter() 
{ 
//windows.clipboardData filter on copy to go here 
} 

</script> 
</head> 
    <body> 
     <Div class="body" onpaste="PasteFilter()" oncopy="CopyFilter"> 
     <!-- div content goes here.--> 
     </Div> 
    </body> 
    </html> 

また、同じフィルタをCOPYにも適用したいと考えています。私はこれを行うには2つの方法があると信じて

答えて

1

おかげで、:

1)簡単な方法 - )(PasteFilterに次のコードを挿入します。

var foo = window.clipboardData.getData('Text'); 
window.clipboardData.setData('Text', foo); 

を最初の行が取得しますclipboardDataのText値(既にHTMLタグが削除されています) と2番目の行は、クリップボードデータをプレーンテキストに設定します。 (IE8でテスト済み)

2)何らかの理由でそれがあなたに適していない場合。

PasteFilter()では、遅延タイムアウトの小さい別の関数をトリガーします。 この関数では、DIVのinnerHTMLコンテンツを取得し、正規表現を実行してすべてのタグを削除します。

例:このことができます

function PasteFilter() 
{ 
    setTimeout('foo()', 200); 
} 

function foo() 
{ 
    var contents = document.getElementById("test").innerHTML; 

    var new_contents = contents.replace(/(<([^>]+)>)/g, ""); // taken from http://css-tricks.com/snippets/javascript/strip-html-tags-in-javascript/ 

    document.getElementById("test").innerHTML = new_contents; 
} 

この方法の問題は、あなたがキャレット位置を失うということです...

希望...

+0

おかげペリー。両方のテクニックを試してみて、Regexのより大きなコンテンツの効率をチェックします。しかし、すでに編集可能なdivにあるすべてのhtmlタグを保持したいと思います。私はwindow.clipboarddataを最初にmanupulateしようとしましょう。ありがとう。 –

+0

私はwindow.clipboardDataを知っているので、IEでしか利用できないのですか? – llamerr

関連する問題