JQuery, чтобы скрыть конкретные комментарии от форумов - PullRequest
0 голосов
/ 30 июня 2019

Итак, я изучаю jQuery и решил использовать в качестве учебного полигона просьбу, которую сделал мне друг.Я пытаюсь создать скрипт для greasemonkey, который, когда выбранный пользователь публикует что-то в теме на форумах Overwatch: (https://us.forums.blizzard.com/en/overwatch/c/general-discussion), скрывает этот конкретный комментарий от всей темы.

Форумрассматриваемый пользователь идентифицирует пользователей по тегу с именем: data-user-id="XXXX", который я хочу использовать в качестве цели моего скрипта при выборе того, какие сообщения скрывать

Ожидаемое поведение таково, когда скрипт запускается и находит, чтоопределенный пользователь с помощью предоставленного мною идентификатора пользователя написал что-то, и он просто спрячет весь свой пост в теме, которую я сейчас читаю.

Вот некоторые из моих экспериментов:

//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();

Я немного борюсь с концепцией динамических идентификаторов, чтобы нацелиться на рассматриваемый элемент и заставить его читать содержимое div, чтобы найти идентификатор пользователя.

Эти запросы действительно не выполнялись.не дает мне никакой ошибки, поэтому я предполагаю, что они не смогли найти строку текста, необходимую для действия.

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

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']);
0 голосов
/ 30 июня 2019

Я думаю, вам просто нужно это:

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

Если вы хотите использовать css: contains (), отбросьте строковые кавычки.В соответствии с селектором W3Schools jQuery: contains () вам просто нужно поместить строку без кавычек в селектор: includes ().Будет выполнен поиск текста между начальным и конечным тегом элемента .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-атрибуте не было точным соответствием, вам нужно использовать * = в селекторе, например:

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

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