jQuery隐藏论坛中的特定评论

时间:2019-06-30 13:21:33

标签: jquery forum

因此,我正在学习一些jQuery,我决定将一个朋友提出的要求用作训练场。我正在尝试为油脂猴子创建一个脚本,当选定的用户在“守望先锋”论坛上的某个线程中发布某些内容时:(https://us.forums.blizzard.com/en/overwatch/c/general-discussion)会从整个线程中隐藏该特定注释。

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

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

这些是我做的一些实验:

//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。

这些查询确实并没有给我任何错误,因此我想他们无法找到执行操作所需的文本字符串。

2 个答案:

答案 0 :(得分:0)

我认为您只需要这个:

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

如果要使用css:contains(),请删除字符串引号。根据{{​​3}},您只需要将不带引号的字符串放在: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”。如果您希望:contains()选择器在不完全匹配的html attr上的行为,则需要在选择器中使用* =,例如:

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

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

答案 1 :(得分:0)

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']);