jQuery 隐藏论坛中的特定评论

jQuery to hide specific comments from forums

所以,我正在学习一些 jQuery 并且我决定将朋友向我提出的请求用作训练场。 I'm trying to create a script for greasemonkey that when a selected user posts something in a thread on the Overwatch forums: (https://us.forums.blizzard.com/en/overwatch/c/general-discussion) it hides that specific comment from the entire thread.

有问题的论坛通过一个名为 data-user-id="XXXX" 的标签来识别用户,这是我在选择要隐藏的 post 时用作脚本目标的标签

预期的行为是,当脚本运行并发现我提供的用户 ID 的某个用户写了一些东西时,它只会将其整个 post 隐藏在我当前正在阅读的线程中.

这些是我做的一些实验:

//Experiment 1
$('#post_2:contains("data-user-id="XXXX"")').remove();

//Experiment 2
$('.boxed.onscreen-post:contains("XXXX")').remove();

//Experiment 3
$("#post_2 > .boxed.onscreen-post:contains('XXXX')").remove();

我在动态 ID 的概念上有点挣扎,以定位有问题的元素并使其读取 div 的内容以找到用户的 ID。

这些查询确实没有给我任何错误,所以我的猜测是他们找不到执行操作所需的文本字符串。

我想你只需要这个:

$('[data-user-id="XXXX"]').remove();

如果要使用 css :contains(),请删除字符串引号。根据 W3Schools jQuery :contains() Selector 你只需要将不带引号的字符串放在 :contains() 选择器中。这将在元素 .onscreen-post 的开始和结束标记之间查找文本。所以不是在它的属性中,而是在块的实际内容中。

$('.boxed.onscreen-post:contains(XXXX)').remove();

// Or when it is a variable
var searchFor = 'XXXX';
$('.boxed.onscreen-post:contains(' + searchFor + ')').remove();

以上不适用于 html 属性,例如您的 data-user-id="XXXX"。如果你想要 html attr 上的 :contains() 选择器的行为不是完全匹配你需要选择器中的 *= 像这样:

$('[data-user-id*="XXXX"]').remove();

// Or when it is a variable
var searchFor = 'XXXX';
$('[data-user-id*="' + searchFor + '"]').remove();

function hidePostsFromUsers(nicknames) {
  var posts$ = $('.contents.ember-view .topic-list-item');

  var filteredPosts$ = posts$.filter(function(ignore, el) {
    return nicknames.some(function(nick) {
      return $(el).find('[data-user-card]').attr('data-user-card') === nick;
    });
  });
  filteredPosts$.remove();
}

hidePostsFromUsers(['Doomfish-21368']);