jquery如果元素包含文本,则将类添加到父div

时间:2014-02-02 20:29:10

标签: javascript jquery

如果其中一个子元素包含单词“Sponsored”,我需要向父div添加一个类。

<div id="post-item">   
  <span class="tags">
      <a href="#">Blogs</a>            
  </span>         
</div>

<div id="post-item">   
  <span class="tags">
      <a href="#">Sponsored by Lorem Ipsum</a>            
  </span>       
</div>

我目前正在尝试使用parent()。addClass但由于某种原因它不能正常工作。你可以在这个小提琴中看到一个例子:http://jsfiddle.net/VrPdF/

if (jQuery('a:contains("Sponsored")').length) {
    jQuery(this).parent('#post-item').addClass('sponz');

}

非常感谢任何和所有帮助 - 谢谢!

3 个答案:

答案 0 :(得分:15)

ID必须是唯一的,因此请使用class来标识父级。您可以使用 .closest()来标识类post-item的父级。

<强> HTML

<div class="post-item">   
  <span class="tags">
      <a href="#">Blogs</a>  
    <h3>Lorem</h3>          
  </span>         
</div>

<div class="post-item">   
  <span class="tags">
      <a href="#">Sponsored by Lorem Ipsum</a>            
  </span>       
    <h3>Lorem</h3>
</div>

<强> 的JavaScript

jQuery('a:contains("Sponsored")').closest('.post-item').addClass('sponz');

DEMO


:has() Selector也可以使用

  

选择包含至少一个与指定选择器匹配的元素的元素。

jQuery('.post-item:has(a:contains("Sponsored"))').addClass('sponz');

jsFiddle

答案 1 :(得分:5)

您不必检查长度,它要么返回一个元素,要么不返回,并且您必须使用closest(),因为#post-item不是直接的父元素。

我使用了类,因为你不能使用重复的ID

$('a:contains("Sponsored")').closest('.post-item').addClass('sponz');

FIDDLE

答案 2 :(得分:1)

以下应该是您的javascript。

$(document).ready(function () {
    jQuery('a:contains("Sponsored")').closest('#post-item').addClass('sponz');
});

Demo