В предыдущем вопросе Я спросил, как реализовать фильтр плохих слов на стороне клиента.
Проблема, с которой я столкнулся, заключается в том, что я не хочу отправлять строку 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'
в качестве литеральной строки для регулярного выражения, а не в качестве ссылочного пути.
Возможно, это что-то действительно глупое, но как бы я это исправил?:
после ответа @ GSP я пробую этот подход, и хотя он кажется ближе, он все еще не работает.
Если я зайду в firebug и посмотрю на переменную «filter» вDOM, он представлен как ['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;
});