因此,我正在学习一些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。
这些查询确实并没有给我任何错误,因此我想他们无法找到执行操作所需的文本字符串。
答案 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']);