[英]Check mutiple div if contains specific text to add css class
I got a page and want to add a css class to every heading, which contains a specific word above it, inside the div "metadata". 我有一个页面,想要在div“元数据”内的每个标题中添加一个css类,其中包含一个特定的单词。 Here is an example: 这是一个例子:
<ul class="postlist">
<li><div class="postBox">
<h2><a href="http://sample.com"> Test Sample 1</a></h2>
<div class="metadata"><a href="LinkToCat" class="link" id="cat">Internal, Test</div>
</div></li>
<li><div class="postBox">
<h2><a href="http://sample.com"> Test Sample 2</a></h2>
<div class="metadata"><a href="LinkToCat" class="link" id="cat">Test</div>
</div></li>
</ul>
I tried with jquery like this: 我试过这样的jQuery:
if ($('div.postBox > div.metadata > a:contains("Internal")').length > 0)
$( "h2 a" ).addClass( "a-internal" );
This works - But the problem is, every heading element gets the class "a-internal", because the headings don't have unique IDs/names, right? 这行得通-但是问题是,每个标题元素都具有“ a-internal”类,因为标题没有唯一的ID /名称,对吗? Does somebody have an idea how I can nevertheless only add the class to the specific heading? 有人知道我怎么仍然只能将类添加到特定标题吗?
Thanks a lot! 非常感谢!
Instead of if
use DOM relationship to target the element. 而不是if
使用DOM关系来定位元素。 Use .closest()
to traverse up-to common ancestor then use .find()
to target the element. 使用.closest()
遍历到共同祖先,然后使用.find()
定位元素。
Use 采用
$('div.postBox > div.metadata > a:contains("Internal")')
.closest('div.postBox') //Traverse up-to common ancestor
.find("h2 a") //target element
.addClass("a-internal")
$('div.postBox > div.metadata > a:contains("Internal")').closest('div.postBox').find("h2 a").addClass("a-internal")
.a-internal { color: green }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <ul class="postlist"> <li> <div class="postBox"> <h2><a href="http://sample.com"> Test Sample 1</a></h2> <div class="metadata"><a href="LinkToCat" class="link" id="cat">Internal, Test</div> </div></li> <li><div class="postBox"> <h2><a href="http://sample.com"> Test Sample 2</a></h2> <div class="metadata"><a href="LinkToCat" class="link" id="cat">Test</div> </div></li> </ul>
:has()
can also be used :has()
也可以使用
$('div.postBox:has(> div.metadata > a:contains("Internal"))')
.find("h2 a")
.addClass("a-internal")
$('div.postBox:has(> div.metadata > a:contains("Internal"))') .find("h2 a") .addClass("a-internal")
.a-internal { color: green }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <ul class="postlist"> <li> <div class="postBox"> <h2><a href="http://sample.com"> Test Sample 1</a></h2> <div class="metadata"><a href="LinkToCat" class="link" id="cat">Internal, Test</div> </div></li> <li><div class="postBox"> <h2><a href="http://sample.com"> Test Sample 2</a></h2> <div class="metadata"><a href="LinkToCat" class="link" id="cat">Test</div> </div></li> </ul>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.