此脚本基本上是为了从论坛中删除特定用户的内容。它按预期工作,但删除的内容中仍有一个剩余元素(表)。任何想法都受到高度赞赏。
代码: https://greasyfork.org/scripts/2690-fitmisc-total-ignore/code
// ==UserScript==
// @name Fitmisc_Total_Ignore
// @author Arris
// @description This script is designed to completly eradicate from sight the worst posters on Fitmisc.com
// @include http://fitmisc.com/*
// @namespace http://fitmisc.com/
// @version 0.9
// ==/UserScript==
function canIgnore(sUser) {
if( sUser.match(/niko/i) )
return true;
if( sUser.match(/thesavagepony/i) )
return true;
if( sUser.match(/Lloyd Banks/i) )
return true;
if( sUser.match(/Lil B/i) )
return true;
if( sUser.match(/Round-Mound/i) )
return true;
return false;
}
function setIgnoreThread() {
var a; var s;
a=document.evaluate(
"//div[starts-with(@class, 'threadmeta')]",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
for (var i=0; i<a.snapshotLength; i++) {
s=a.snapshotItem(i).innerHTML;
if( canIgnore(s) ) {
//a.snapshotItem(i).parentNode.parentNode.parentNode.style.display = 'none';
a.snapshotItem(i).parentNode.parentNode.parentNode.innerHTML = '';
}
}
}
function setIgnorePost() {
var a; var s;
a=document.evaluate(
"//div[starts-with(@class, 'username_container')]",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
for (var i=0; i<a.snapshotLength; i++) {
s=a.snapshotItem(i).innerHTML;
if( canIgnore(s) ) {
//a.snapshotItem(i).parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
a.snapshotItem(i).parentNode.parentNode.parentNode.innerHTML = '<li class="postbitlegacy postbitim postcontainer old" style="background:white;border-color:white;"></li>';
}
}
}
function setIgnoreQuote() {
var a; var s;
a=document.evaluate(
"//div[starts-with(@class, 'bbcode_postedby')]",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
for (var i=0; i<a.snapshotLength; i++) {
s=a.snapshotItem(i).innerHTML;
if( canIgnore(s) ) {
//a.snapshotItem(i).parentNode.parentNode.parentNode.style.display = 'none';
a.snapshotItem(i).parentNode.innerHTML = '';
}
}
}
if(window.opera) { //opera only
(function(){
document.addEventListener('DOMContentLoaded', function() {
setIgnoreThread();
setIgnorePost();
setIgnoreQuote();
}, false);
})()
} else {
setIgnoreThread();
setIgnorePost();
setIgnoreQuote();
}
答案 0 :(得分:-1)
不是在专用的正则表达式中对每个用户名进行硬编码,而是考虑生成与被忽略的用户名数组中的任何项匹配的单个表达式。当您不需要存储结果时,请使用RegExp.test()方法。
(我在我的示例中删除了用户名,但匿名运营商帐户“OP”除外。我不喜欢公开诽谤。)
var
ignoredUsers = ['user 1', 'another user', 'OP', 'yet another user']
;
function canIgnore(sUser)
{
return new RegExp(ignoredUsers.join('|'), 'i').test(sUser);
}
但是,不需要提取用户名,针对正则表达式检查它们并进行进一步处理,因为您正在使用可以在DOM树中查找内容并退回的XPath表达式。他们能够使用容器类中的一个用户列表检索所有文本节点,并返回由类选择的祖先([grand]父级)。
// = =UserScript= =
// @name Fitmisc_Total_Ignore
// @author Arris
// @description This script is designed to completly eradicate from sight the worst posters on Fitmisc.com
// @include http://fitmisc.com/*
// @namespace http://fitmisc.com/
// @grant GM_xpath
// @version 0.9
// = =/UserScript= =
var
// TODO: GM_ get/set Value as JSON ; put users into igno list by mouse click
ignoredUsers = ['user 1', 'another user', 'OP', 'yet another user']
;
function removeContents(ignoreList)
{
if(ignoreList instanceof Array && ignoreList.length)
GM_xpath
( { path: "//div[@class='username_container']//*[text() = '"
+ ignoreList.map(function(user) { return user.replace("'", "\\'"); } ).join("' or text() = '")
+ "']/ancestor::li[contains(@class, 'postcontainer')]",
all :true
}
).forEach(function(elem){ elem.parentElement.removeChild(elem); });
}
removeContents(ignoredUsers);
由于可以重命名用户帐户,因此请考虑过滤用户ID,例如在个人资料链接或照片的href
属性中,而不是依赖于可变名称。
上面的示例在线程帖子上完成了工作。您可以通过“|”将多个XPath表达式合并为一个炭。