Отфильтруйте тег HTML на вставке для div и oncopy - PullRequest
1 голос
/ 16 августа 2011

У меня на сайте есть редактируемый раздел для отправки сообщения на форуме. люди могут редактировать там сообщения (полужирный, курсив, подчеркивание, добавлять ссылки и многое другое)

Но я хочу, чтобы когда кто-нибудь вставлял или удалял (- не нужно, но вставляю) свой текст, я хочу, чтобы он шел в div без HTML-тегов. - чисто, просто текст. (например, если кто-то собирается написать слово и сделать текст размером 200 пунктов, а затем скопировать и вставить его в мой блок, у него будет совсем другое сообщение ... и я не хочу, чтобы это произошло).

Как я могу отсканировать текст, поступающий из буфера обмена, чтобы уничтожить любые теги 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 Ответ

1 голос
/ 16 августа 2011

Я считаю, что есть 2 способа сделать это:

1) Самый простой способ - вставить следующий код в PasteFilter ():

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

первая строка получает значение Text для clipboardData (уже очищенное от тегов HTML) а вторая строка устанавливает clipboardData для простого текста ... (Проверено на IE8)

2) Другой способ - если по какой-то причине это вам не подходит ..

В PasteFilter () вы запускаете другую функцию с небольшим тайм-аутом. В этой функции вы получаете содержимое innerHTML DIV и запускаете регулярное выражение для удаления всех тегов.

Пример:

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;
}

Проблема этого метода в том, что вы теряете позицию каретки ...

Надеюсь, это поможет ...

...