Я пишу сценарий Greasemonkey, чтобы выборочно скрывать элементы, содержащие неприятные вещи (персональное веб-средство для очистки, если хотите).
Вот что я получил до сих пор:
//custom contains function which is case-insensitive
$.extend($.expr[":"], {
"containsNC": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
//build array of words to filter
var nope = "long list of horrible words".toLowerCase().split(' ');
//start with an empty jQuery object
var nopeEles = $();
//add elements to filter to it
for (var i = 0; i < nope.length; i++) {
nopeEles = nopeEles.add( $("a:containsNC('" + nope[i] + "')") );
nopeEles = nopeEles.add( $("p:containsNC('" + nope[i] + "')") );
}
//hide all applicable elements
nopeEles.css("background-color", "white");
nopeEles.css("color", "white");
Работает прилично, но выполняет частичное сопоставление слов, из-за чего короткие слова не работают.Я хочу отфильтровать элементы, содержащие такие слова, как «die» и «gun», без фильтрации таких слов, как «candied» или «gung-ho».
Чтобы было ясно, я после целого слова,не точный текст.Я хочу, чтобы «пистолет» в списке совпадал не только с «пистолетом», но и с «он выстрелил из пистолета» и «пистолет выстрелил».И не «сержант-ганни».
Каждый ответ, который я видел в этой теме, рекомендует использовать фильтр jQuery ().Я думаю, что я не понимаю это достаточно хорошо.Я попытался использовать эту строку в цикле, но ничего:
nopeEles = nopeEles.add( $("a").filter(function() { return $(this).text() === nope[i]; }) );
Другой угол, на который я думал взглянуть, - это перебираться с containsNC, поэтому он ищет слово, но с пробелом или концом строки налюбая сторона.Хотя я не совсем понимаю, как работает содержащиеся в NC.
Любые указатели были бы очень благодарны!