我知道这个问题已经在这里触及,但我还没有找到适合我情况的可行解决方案,所以我想让大脑信任回来工作并看看可以做些什么。
我有一个表单中的textarea需要检测何时粘贴到其中,并清除任何隐藏的HTML&引号。这个表单的内容通过电子邮件发送到第三方系统,这是特别讨厌的,所以有时甚至将它编码为html实体字符也不是一个安全的赌注。
我很遗憾不能使用类似FCKEditor,TinyMCE等的东西,在这种情况下它必须保持常规textarea。我试图从单词功能中剖析FCKEditor的粘贴,但没有运气跟踪它。
然而,如果需要,我可以使用jQuery库,但还没有找到一个jQuery插件。
我专门寻找用于清理粘贴信息的信息,而不是如何监控元素以更改内容。
非常感谢任何建设性的帮助。
答案 0 :(得分:8)
我正在看David Archer的回答,他几乎回答了这个问题。我过去曾使用类似于他的解决方案:
$("textarea").change( function() {
// convert any opening and closing braces to their HTML encoded equivalent.
var strClean = $(this).val().replace(/</gi, '<').replace(/>/gi, '>');
// 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而不是文本框