我想为我的浏览器(Opera、Chromium)编写一个用户脚本,删除包含预定义关键字的链接。例如,当一个链接是黑名单的一部分<a href="foo">bar</a>
时,它应该从页面中消失。foo
除了首先显示如何获取和过滤站点之外,我如何从页面中删除重复链接,但我想直接通过用户脚本执行此操作。任何想法如何在每个页面加载时应用过滤器?
我想为我的浏览器(Opera、Chromium)编写一个用户脚本,删除包含预定义关键字的链接。例如,当一个链接是黑名单的一部分<a href="foo">bar</a>
时,它应该从页面中消失。foo
除了首先显示如何获取和过滤站点之外,我如何从页面中删除重复链接,但我想直接通过用户脚本执行此操作。任何想法如何在每个页面加载时应用过滤器?
获取document.links集合。如果它们的任何.href属性与您的黑名单匹配,请将它们的style.display属性设置为'none'。
例如
function removeLinks () {
var blackList = /foo|bar|baz/;
var link, links = document.links;
var i = links.length;
while (i--) {
link = links[i];
if (blackList.test(link.href)) {
link.style.display = 'none';
}
}
}
删除重复链接是一个类似的练习。首先将链接HTMLCollection转换为普通数组,然后在迭代它们时使用它们的 href 作为对象的创建属性。如果 href 已经是属性,请使用上述方法或link.parentNode.removeChild(link)将其隐藏。
您可以使用XPATH及其contains() 函数通过document.evaluate匹配链接。
Dive Into Greasemonkey有一个使用 XPATH 选择和迭代节点的示例。
for (var i = 0; i < blacklist.length; i++) {
var links = document.evaluate('//a[contains(@href, "' + blacklist[i] + '"]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var j = 0; j < links .snapshotLength; j++) {
var link = links.snapshotItem(j);
link.parentNode.removeChild(link);
}
}
你可以使用这样的东西
$("a[href*='" + foov + "']").css('display', 'none')