简体   繁体   English

检查多个div是否包含要添加CSS类的特定文本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM