在previous question中,我问过如何实现客户端坏字过滤器。
我遇到的问题是我不想将masive字符串发送到页面,而是从外部文件中调用它。
这是迄今为止的代码
var filter = ['ass']; // this is a literal JSON result
String.prototype.repeat = function (num) {
return new Array(num + 1).join(this);
}
$('body').html(function (i, txt) {
for (var i = 0; i < filter.length; i++) {
// Create a regular expression and make it global
var pattern = new RegExp('\\b' + filter[i] + '\\b', 'g');
txt = txt.replace(pattern, "****");
}
return txt;
});
但是我想把它改成像
这样的东西 var filter = '/generic/profanity/'; // the "profanity" page generates the exact
// same JSON result as above only in a cached
// external page (it's actually generated by
// an ASP.NET MVC Controller (ContentResult)
String.prototype.repeat = function (num) {
return new Array(num + 1).join(this);
}
$('body').html(function (i, txt) {
for (var i = 0; i < filter.length; i++) {
// Create a regular expression and make it global
var pattern = new RegExp('\\b' + filter[i] + '\\b', 'g');
txt = txt.replace(pattern, "****");
}
return txt;
});
但不幸的是,它使用'/generic/profanity'
作为正则表达式的文字字符串而不是引用路径。
这可能是非常愚蠢的事情,但我该如何解决这个问题?
如果我进入firebug并查看DOM中的“filter”变量,则表示为['asdf']
var filter = '';
String.prototype.repeat = function (num) {
return new Array(num + 1).join(this);
}
$('.page').html(function (i, txt) {
$.getJSON('/generic/profanity', function (data) {
// data is the contents of the
filter = data;
});
for (var i = 0; i < filter.length; i++) {
// Create a regular expression and make it global
var pattern = new RegExp('\\b' + filter[i] + '\\b', 'g');
txt = txt.replace(pattern, "****");
}
return txt;
});
答案 0 :(得分:1)
因为JQuery总是从浏览器上下文运行,所以你总是会下载文件,所以这不会像你想象的那样工作。
但是,如果你想使用这个方法,你需要使用其中一个JQuery方法,如$ .get或$ .getJSON来解析它之前从你的服务器获取文件:
var filter = '';
$.getJSON('/generic/profanity', function(data) {
// data is the contents of the
filter = data;
});
答案 1 :(得分:0)
如果不太了解上一个主题,只需在filter
上执行替换,然后对\
进行转义(\\
)。虽然不确定你将如何使用JavaScript打开文件(除非文件是托管的,你使用ajax或其他东西来检索列表)。在访问本地文件时,JS非常容易使用。
var pattern = new RegExp('\\b' + filter[i].replace('\\','\\\\') + '\\b', 'g');
答案 2 :(得分:0)
以下是一个示例:Dynamically loading an external JavaScript or CSS file
因为JSON通常是纯JavaScript,所以上面的例子应该可以工作。