jquery - If div contains specific word add a new class in parent div using jquery
问题描述
This is the HTML code:
<div class="menu-3-cat">
<div class="menu-item-category">Offer</div>
</div>
And here's the jquery
if ($('.menu-item-category').text() === 'Offer') {
$('.menu-3-cat').addClass('make-me-red');
}
It should be work and add the class "make-me-red" to the parent div "menu-3-cat" but it doesn't. What i 'm doing wrong?
JSFiddle HERE
解决方案
Based on your JSFiddle and your comments, you'll need to compare the text()
for each selected element. Otherwise, text()
will return the "combined text contents of each element in the set of matched elements".
One way is to iterate over each element:
I've also added trim()
to strip away any white space from the elements' text contents.
var $categories = $('.menu-item-category');
$categories.each(function() {
var $this = jQuery(this);
if ($this.text().trim() == 'Offer') {
$this.closest('.menu-3-cat').addClass('make-me-red');
}
});
.menu-3-cat {
position: relative;
overflow: hidden;
}
.make-me-red {
background: #F44336;
color: #ffffff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="menu-3-cat">
<div class="menu-item-category">
Things
</div>
</div>
<div class="menu-3-cat">
<div class="menu-item-category">
Offer
</div>
</div>
<div class="menu-3-cat">
<div class="menu-item-category">
Stuff
</div>
</div>
Another method is to filter the selection to elements whose text is "Offer" before adding the class.
const $categories = $('.menu-item-category');
$categories
.filter((k, elm) => jQuery(elm).text().trim() == 'Offer')
.closest('.menu-3-cat')
.addClass('make-me-red')
.menu-3-cat {
position: relative;
overflow: hidden;
}
.make-me-red {
background: #F44336;
color: #ffffff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="menu-3-cat">
<div class="menu-item-category">
Things
</div>
</div>
<div class="menu-3-cat">
<div class="menu-item-category">
Offer
</div>
</div>
<div class="menu-3-cat">
<div class="menu-item-category">
Stuff
</div>
</div>
<div class="menu-3-cat">
<div class="menu-item-category">
Nothing
</div>
</div>
<div class="menu-3-cat">
<div class="menu-item-category">
Offer
</div>
</div>
<div class="menu-3-cat">
<div class="menu-item-category">
Last One
</div>
</div>
推荐阅读
- javascript - 如何将 postMessageToChannel 中的按钮发布到松弛通道并在单击按钮时调用函数?
- java - 错误:找不到合适的方法 setQuery(com.google.firebase.firestore.Query,Class
) - c# - 以编程方式获取站点列表的不同方法
- flutter - 输入'LabeledGlobalKey
>' 不是“GlobalKey”类型的子类型 - html - Aria-label 在带有 NVDA 的 Chrome 和 Firefox 中不起作用
- python - 为树中的每个节点生成 ID
- c# - 创建依赖于 netstandard 包的 netcore 3.0 项目的 NuGet 包
- spring-boot - openapi 3.0 中所有 API 的强制标头
- javascript - ReactJs 道具在 componentDidMount 中返回未定义
- ios - 如何在 Xcode 项目中使用 C 库?