0

<input>我编写了一个代码,它可以很好地通过 jQuery删除 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:不需要服务器端安全,顺便说一句,在管理区域使用。

4

4 回答 4

3

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

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

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

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

于 2013-03-19T08:58:29.753 回答
2

试试这个

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

});
于 2013-03-19T08:56:13.863 回答
1

你可以为此使用正则表达式

<[^>]*(>|$)

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

于 2013-03-19T08:56:47.643 回答
1

我找到了两种方法:

一个在stackoverflow上

另一个是这样的:

var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,"");
于 2013-03-19T08:59:09.323 回答