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

时间:2011-06-29 07:33:37

标签: javascript userscripts

我想为我的浏览器(Opera,Chromium)编写用户脚本,删除包含预定义关键字的链接。例如,当<a href="foo">bar</a>成为黑名单的一部分时,链接foo应该从页面中消失。

How do i remove duplicate links from a page except first显示了如何获取和过滤网站,但我希望通过用户脚本直接执行此操作。任何想法如何在每个页面加载时应用过滤器?

3 个答案:

答案 0 :(得分:5)

获取 document.links 集合。如果他们的 .href 属性与您的黑名单相匹配,请将 style.display 属性设置为'none'

e.g。

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 转换为普通数组,然后在迭代它们时使用它们的hrefs作为对象的create属性。如果href已经是属性,请使用上述方法或 link.parentNode.removeChild(link)隐藏它。

答案 1 :(得分:0)

您可以使用XPATH及其contains() function来通过document.evaluate匹配这些链接。

Dive Into Greasemonkey有一个selecting and iterating over nodes using 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);
  }
}

答案 2 :(得分:-1)

你可以使用这样的东西

$("a[href*='" + foov + "']").css('display', 'none')