javascript 使用过滤器在类中搜索文本

jjhzyzn0  于 2023-06-28  发布在  Java
关注(0)|答案(3)|浏览(84)

我有这个html:

<td class="catName" data-bs-toggle="collapse" data-bs-target=".category1">A</td>
<td class="catName" data-bs-toggle="collapse" data-bs-target=".category2">B</td>
<td class="catName" data-bs-toggle="collapse" data-bs-target=".category3">C</td>

我想使用filter函数查找具有innerText“A”的类。
尝试使用:

jQuery(".catName").filter(item => jQuery(item).text() == "A");

但它不起作用。
我用的是Jquery我必须使用filter。而且我必须使用arrow function

wgxvkvu9

wgxvkvu91#

在纯JavaScript中(没有jQuery):

  • 使用.querySelectorAll()获取目标选择器元素的NodeList
  • 使用Array.from()或使用Array spread ... syntax将NodeList转换为Array
  • 使用Array.prototype.filter()和Arrow Function迭代Array中的每个元素,并通过指定的布尔语句对其进行过滤(进入一个新的Array)。从那时起,你可以使用Array.prototype.forEach()来迭代你的过滤数组:
const elsCatName = document.querySelectorAll(".catName");
const catName_A = [...elsCatName].filter(el => el.textContent === "A");

// Use in example like:
catName_A.forEach(el => el.style.color = "red");
<table>
  <tbody>
    <tr>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category1">A</td>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category2">B</td>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category3">C</td>
    </tr>
  </tbody>
</table>

为了完整起见,在jQuery中,上面的内容可以表示为:

$(".catName").filter((i, el) => el.textContent === "A").css({color: "red"});
<table>
  <tbody>
    <tr>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category1">A</td>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category2">B</td>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category3">C</td>
    </tr>
  </tbody>
</table>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>

或者,如果您需要一种惰性匹配方法(也可能匹配"XXA")-jQuery的:contains()选择器

$(".catName:contains('A')").css({color: "red"});
<table>
  <tbody>
    <tr>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category1">A</td>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category2">B</td>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category3">C</td>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category3">XXAZZ</td>
    </tr>
  </tbody>
</table>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
vsmadaxz

vsmadaxz2#

1.由于您的标记是无效的立场没有什么将工作。您需要添加一些相应的表元素。

  1. filter的第一个参数是indexitem是第二个参数(这与原生JS数组方法的工作方式相反)。
    在这个例子中,我用“A”过滤单元格,并将其背景变为红色。
$(".catName").filter((index, item) => {
  return $(item).text() == "A";
}).css('background-color', 'red');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tbody>
    <tr>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category1">A</td>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category2">B</td>
      <td class="catName" data-bs-toggle="collapse" data-bs-target=".category3">C</td>
    </tr>
  </tbody>
</table>
bmp9r5qi

bmp9r5qi3#

<td>元素至少需要 Package 在<table>元素标记中,才能对DOM有意义。
另一件需要更改的事情是,JQuery filter()方法首先接收index,并将JQuery item作为第二个参数。所以你需要filter((i, item) =>
$(".catName").filter((i, item) => $(item).text() == "A");
有关完整示例,请参见JSFiddle:https://jsfiddle.net/Lexdp7rt/

相关问题