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

发布于 2024-11-18 03:54:29 字数 329 浏览 3 评论 0 原文

我想为我的浏览器(Opera、Chromium)编写一个用户脚本,用于删除包含预定义关键字的链接。例如,当 foo 属于黑名单时,链接 bar 应该从页面中消失。

如何从页面中删除重复的链接,除了首先展示了如何获取和过滤站点,但我想直接通过用户脚本来执行此操作。有什么想法如何在每个页面加载上应用过滤器吗?

I want to write a user script for my browsers (Opera, Chromium) that removes links containing predefined keywords. For example, a link <a href="foo">bar</a> should simply vanish from the page when foo is part of the blacklist.

How do i remove duplicate links from a page except first shows how to get and filter a site, but I want to do this directly via a user script. Any ideas how I would apply the filter on every page load?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

黑色毁心梦 2024-11-25 03:54:29

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

Get the document.links collection. If any of their .href properties match your blacklist, set their style.display property to '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';
    }
  }
}

Edit

To remove duplicate links is a similar exercise. First convert the links HTMLCollection to a plain array, then as you iterate over them use their hrefs as create properties of an object. If the href is already a property, hide it using the above method or link.parentNode.removeChild(link).

忆梦 2024-11-25 03:54:29

您可以使用 XPATH 及其 contains() 函数 来匹配通过 文档.评估

深入了解 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);
  }
}

You could use XPATH and its contains() function to match the links via document.evaluate.

Dive Into Greasemonkey has an exampl eof 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);
  }
}
棒棒糖 2024-11-25 03:54:29

你可以使用这样的东西

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

You could use something like this

$("a[href*='" + foov + "']").css('display', 'none')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文