查找文本包含列表/数组中的条目的元素

问题描述 投票:0回答:2

我正在开发一个自定义用户脚本,它将阻止/标记我的列表中的用户。假设该列表将包含字符串“EvilJoe”、“ToxicWill”和“NegativeSara”。我想找到所有“span.username”元素,其中跨度内的文本包含上面的字符串之一,因此例如“User EvilJoe Premium”将匹配。

我可以通过 badUserNames 进行循环来完成此操作,对于每个 badUserName 我会执行类似的操作

 $("span.username:contains(badUserName)").append(" - bad guy");

这是一个有效的解决方案吗?

javascript html jquery css tampermonkey
2个回答
0
投票
如果有大量 DOM 元素,

:contains 会很慢,因为 jQuery 本身充当中间人,将 :contains 转换为原生 JS 函数。在这种情况下,最好使用这样的正则表达式:

var badUserRegex = new RegExp('(EvilJoe|ToxicWill|NegativeSara)', 'i');

// Find all the span.username elements that match the regex
$('span.username').filter(function() {
  return badUserRegex.test($(this).text());
}).append(' - bad guy');

0
投票

此代码在页面的整个主体中搜索包含

searchTerms
数组中任何搜索词的元素。
:not(script)
选择器用于从搜索中排除任何脚本元素。

尝试下面的代码

var searchTerms = ["badUserName"];
var matchingElements = $("body :not(script)").filter(function () {
  var elementText = $(this).clone().children().remove().end().text();
  return searchTerms.some(function (term) {
    return elementText.indexOf(term) > -1;
  });
});
matchingElements.append(" - bad guy");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
  <div>
    <p>Text content badUserName.</p>
  </div>
  <div>
    <p>Text content badUserName between</p>
  </div>
  <div>
    <p>badUserName text at starts.</p>
  </div>
  <div>
    <p>no text.</p>
  </div>
</body>

© www.soinside.com 2019 - 2024. All rights reserved.