需要Pure / jQuery Javascript解决方案从文本区域清除Word HTML

时间:2009-06-24 12:42:57

标签: javascript jquery html ms-word

我知道这个问题已经在这里触及,但我还没有找到适合我情况的可行解决方案,所以我想让大脑信任回来工作并看看可以做些什么。

我有一个表单中的textarea需要检测何时粘贴到其中,并清除任何隐藏的HTML&引号。这个表单的内容通过电子邮件发送到第三方系统,这是特别讨厌的,所以有时甚至将它编码为html实体字符也不是一个安全的赌注。

我很遗憾不能使用类似FCKEditor,TinyMCE等的东西,在这种情况下它必须保持常规textarea。我试图从单词功能中剖析FCKEditor的粘贴,但没有运气跟踪它。

然而,如果需要,我可以使用jQuery库,但还没有找到一个jQuery插件。

我专门寻找用于清理粘贴信息的信息,而不是如何监控元素以更改内容。

非常感谢任何建设性的帮助。

5 个答案:

答案 0 :(得分:8)

我正在看David Archer的回答,他几乎回答了这个问题。我过去曾使用类似于他的解决方案:

$("textarea").change( function() {
    // convert any opening and closing braces to their HTML encoded equivalent.
    var strClean = $(this).val().replace(/</gi, '&lt;').replace(/>/gi, '&gt;');

    // Remove any double and single quotation marks.
    strClean = strClean.replace(/"/gi, '').replace(/'/gi, '');

    // put the data back in.
    $(this).val(strClean);
});

如果您正在寻找一种完全删除HTML标记的方法

$("textarea").change( function() {
    // Completely strips tags.  Taken from Prototype library.
    var strClean = $(this).val().replace(/<\/?[^>]+>/gi, '');

    // Remove any double and single quotation marks.
    strClean = strClean.replace(/"/gi, '').replace(/'/gi, '');

    // put the data back in.
    $(this).val(strClean);
});

答案 1 :(得分:5)

您可以查看Connor McKay的Word HTML Cleaner。它是一个相当强大的清洁工,因为它删除了许多你可能想要保留的东西,但如果这不是问题,它看起来相当不错。

答案 2 :(得分:1)

这样的事情:

function cleanHTML(pastedString) {
    var cleanString = "";
    var insideTag = false;
    for (var i = 0, var len = pastedString.length; i < len; i++) {
        if (pastedString.charAt(i) == "<") insideTag = true;
        if (pastedString.charAt(i) == ">") {
            if (pastedString.charAt(i+1) != "<") {
                insideTag = false;
                i++;
            }
        }
        if (!insideTag) cleanString += pastedString.charAt(i);
    }
    return cleanString;
}

然后只需使用事件监听器来调用此函数并传入粘贴的字符串。

答案 3 :(得分:1)

使用不经常触发的模糊事件可能很有用:

$("textarea").blur(function() {
    // check input ($(this).val()) for validity here
});

答案 4 :(得分:0)

从jquery docs编辑..

$("textarea").change( function() {
    // check input ($(this).val()) for validity here
});

用于检测变化。清洁可能是各种各样的正则表达式

在上面编辑,寻找textarea而不是文本框