过滤掉div和oncopy的HTML Tag onpaste

时间:2011-08-16 11:53:06

标签: javascript internet-explorer filter onpaste oncopy

我的网站中有一个可编辑的div来发送论坛消息。  人们可以在那里编辑消息(粗体,斜体,下划线,添加链接等)

但我希望当一些粘贴或删除( - 不需要删除,但粘贴它)时,我希望它在带有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中使用相同的过滤器。

谢谢,

1 个答案:

答案 0 :(得分:1)

我相信有两种方法可以做到这一点:

1)简单方法 - 在PasteFilter()中插入以下代码:

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

第一行获取clipboardData的Text值(已剥离HTML标记) 第二行将clipboardData设置为纯文本... (在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;
}

这种方法的问题在于你失去了插入位置......

希望这会有所帮助......