如何通过JavaScript从页面中删除链接?

4
我想为我的浏览器(Opera、Chromium)编写一个用户脚本,以删除包含预定义关键字的链接。例如,当“foo”在黑名单中时,链接<a href="foo">bar</a>应该从页面上简单地消失。 如何从页面中删除除第一个以外的重复链接展示了如何获取和过滤站点,但我想直接通过用户脚本实现此操作。有什么想法可以在每次页面加载时应用过滤器吗?
3个回答

6
获取 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)隐藏它。


是否有可能删除页面上的所有链接(而不仅仅是黑名单中的链接)? - Anderson Green
当然,只需删除 if 测试即可。如果您想从 DOM 中删除链接节点,请使用 link.parentNode.removeChild(link); - RobG

0
你可以使用 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);
  }
}

-1
你可以使用类似这样的东西
$("a[href*='" + foov + "']").css('display', 'none')

1
只是想提醒一下,这只能与jQuery一起使用...不能与本地的Javascript引擎一起使用。 - LeeR
更不用说使用 hide() 更为合适了。 - alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接