在keypress上的<input />中删除HTML标记

时间:2013-03-19 08:53:34

标签: jquery html input replace

我创建了一个代码,它可以通过jQuery删除<input>中的HTML标记

$("input").on("keypress",function(e){
    var val = $(this).val();
    var open = val.indexOf('<');
    var close = val.indexOf('>');
    if(open!==-1 && close!==-1) {
      $(this).val(val.replace(val.slice(open,close+1),""));
    }
});

演示: http://jsbin.com/uzibey/1/edit

但是我应该使用更好的想法或功能吗?

PS:无需服务器端安全性,在管理区域中使用btw。

4 个答案:

答案 0 :(得分:3)

您还可以使用DOM来清理输入。只需创建一个虚拟元素(不将其插入文档),然后使用innerHTML插入输入值。然后删除除文本节点之外的所有节点。

这样做的好处是可以使用实际的HTML解析器来检测HTML,而不是使用正则表达式逼近。将删除浏览器可以解释为HTML元素的任何内容。

这是一个非常基本的演示:http://jsfiddle.net/uA94h/

编辑:上面的演示完全删除了非文本节点。根据请求,这里是一个演示,其中元素被替换为其文本:http://jsfiddle.net/TknBs/

答案 1 :(得分:2)

试试这个

$("input").on("keypress",function(e){
    var val = $(this).val();
    var regex = /(<([^>]+)>)/ig;
    var result = val .replace(regex, "");
    $(this).val(result);

});

答案 2 :(得分:1)

你可以使用正则表达式

<[^>]*(>|$)

尝试将此一个应用于输入字符串以查看它是否有帮助......

答案 3 :(得分:1)

我发现了两种方式:

一个人在stackoverflow

另一个是:

var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,"");