隐藏某些用户的评论?

时间:2016-02-02 22:51:00

标签: javascript jquery dom

我使用Chrome扩展程序Web Override进行了一些操作,效果很好。现在我试图在Stack Overflow上隐藏某些用户的评论,但它似乎并没有起作用。我认为这是评论的加载方式。

这是javascript:

$(function() {
    $('.comment-user:contains("DevilsAdvocate")').closest('.comment').hide();
});

如果我只是将$('.comment-user:contains("DevilsAdvocate")').closest('.comment').hide();粘贴到控制台中,它会隐藏我的评论,但是当我正常加载页面时它不会这样做。

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是使用MutationObserver()

这将允许您监听评论部分的任何更改并相应地做出反应。粗略的实现可以在下面看到。您创建观察者并为其提供隐藏功能,以便每次发生突变时它都会隐藏所有相关注释。

然后你告诉观察者观看帖子的评论部分。我相信你可以写一个更加jquery的方式来做这件事。现在它只关心它找到的第一个.comments部分。这将监听任何子更改,属性更改和子树更改。

var observer = new MutationObserver(function (mutations) {
    $('.comment-user:contains("DevilsAdvocate")').closest('.comment').hide();
});

observer.observe(document.querySelectorAll(".comments")[0], {
    attributes: true,
    childList: true,
    characterData: true,
    subtree: true
});

我不知道这会对性能产生什么影响,jQuery可能有自己的方式来观察DOM的变化。更好的方法是使用注释JavaScript代码进行面向方面编程,以便在发布新注释后立即调用您的hider,甚至可以在那里过滤注释。

或者,就我无法支持而言,请监听Stack Exchange API可能发出的事件,以便在加载新注释时通知您。

随之而来的问题是,我不相信Stack Exchange客户端JavaScript是任何公共API的一部分,因此对它的任何更改都可能会破坏您的代码。