javascript - JS检查元素 block 是否包含一个或几个单词而不是运行代码的最佳方法

标签 javascript jquery

我想检查一个元素 block 是否包含一个或几个单词并运行特定代码。

在一个主题中我需要插入一些链接。

这是 HTML:

<div>
<span class="nr">1</span>
<span class="block_subt">Element subtitle number one</span>
<a class="link" href="">Click here</a>
</div>
<div>
<span class="nr">2</span>
<span class="block_subt">Element subtitle number two</span>
<a class="link" href="">Click here</a>
</div>
<div>
<span class="nr">3</span>
<span class="block_subt">Element subtitle number three</span>
<a class="link" href="">Click here</a>
</div>

</div>

我想创建 if 语句来检查带有“block_subt”的 span 是否包含像“three”这样的工作,它会在它旁边附加一个指向 anchor 的链接。 但也想覆盖多个 block 。 这意味着覆盖另一个元素,如果它包含单词“三号”,则添加一个不同的链接到下一个 anchor 。 如果另一个“block_subt”包含“two”附加一个不同的链接。

最好的方法是什么?

显然,多次使用一个代码不是一个好主意。另外,我在下面运行的代码将更改每个 anchor ,我只想更改包含此特定单词的 HTML 元素旁边的一个。

if ($(".block_subt:contains('Two')").length) {
        $(".link").attr("href", "http://www.google.com");
    }

这不是个好主意。有人可以给我一个关于这个的指示吗?

最佳答案

如果您确实采用了循环方式,则可以使用 .includes().next() 来查找匹配的文本位。此外,如果您想搜索多个单词,可以使用 .some() 方法。

var blocks = $('.block_subt');

blocks.each(function(i, div) {
  var text = $(div).text().replace("'", "").split(" ");
  var searchWords = ["number's", "one"];
  
  if (searchWords.some(word => text.includes(word))) {
    var a = $(this).next();
    $(a).attr("href", "http://www.google.com");
  };
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- WILL MATCH -->
<div>
  <span class="nr">1</span>
  <span class="block_subt">Element subtitle number's one</span>
  <a class="link" href="">Click here</a>
</div>
<div>
  <span class="nr">1</span>
  <span class="block_subt">Element subtitle number one</span>
  <a class="link" href="">Click here</a>
</div>

<!-- WILL NOT MATCH -->
<div>
  <span class="nr">2</span>
  <span class="block_subt">Element subtitle numbers two</span>
  <a class="link" href="">Click here</a>
</div>
<div>
  <span class="nr">3</span>
  <span class="block_subt">Element subtitle numbered three</span>
  <a class="link" href="">Click here</a>
</div>

它有点冗长,但也许可以帮助您朝着正确的方向前进。

关于javascript - JS检查元素 block 是否包含一个或几个单词而不是运行代码的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66642776/

相关文章:

javascript - 折叠/展开时动画字体 Awesome Chevron 图标旋转

javascript - 在事件选项卡期间文本颜色更改为白色

javascript - 如何在html页面中显示php错误信息?

javascript - document.domain 可以包含端口号吗?

javascript - 如何使字符串安全地用作 math.js 表达式

javascript - 有没有像 JavaScript 编译器这样的东西?

javascript getComputedStyle,但不是继承的(在 chrome 中)

javascript - 如何在多选插件中选择限制数量的选项?

javascript - 如何在 typeahead.js 中实现去抖?

javascript - 如何在 SharedWorker 中启动服务器发送事件 "only once"以推送任何打开脚本的消息?