简体   繁体   English

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

[英]How do I remove links from a page via JavaScript?

I want to write a user script for my browsers (Opera, Chromium) that removes links containing predefined keywords.我想为我的浏览器(Opera、Chromium)编写一个用户脚本,删除包含预定义关键字的链接。 For example, a link <a href="foo">bar</a> should simply vanish from the page when foo is part of the blacklist.例如,当foo是黑名单的一部分时,链接<a href="foo">bar</a>应该从页面中消失。

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?任何想法如何在每个页面加载时应用过滤器?

Get the document.links collection.获取document.links集合。 If any of their .href properties match your blacklist, set their style.display property to 'none' .如果它们的任何.href属性与您的黑名单匹配,请将它们的style.display属性设置为'none'

eg例如

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.首先将链接HTMLCollection转换为普通数组,然后在迭代它们时使用它们的 href 作为 object 的创建属性。 If the href is already a property, hide it using the above method or link.parentNode.removeChild(link) .如果 href 已经是属性,请使用上述方法或link.parentNode.removeChild(link)将其隐藏。

You could use XPATH and its contains() function to match the links via document.evaluate .您可以使用XPATH及其contains() function通过document.evaluate匹配链接。

Dive Into Greasemonkey has an exampl eof selecting and iterating over nodes using XPATH . 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);
  }
}

You could use something like this你可以使用这样的东西

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM