找到第一个父级并通过jQuery添加类

时间:2014-12-17 11:58:56

标签: javascript jquery css

HTML:

<div class="views-row views-row-10 views-row-even views-row-last">    
  <div class="sonuc">        
    <span>text1</span>  
  </div>
</div>
<div class="views-row views-row-11 views-row-even views-row-last">    
  <div class="sonuc">        
    <span>text2</span>  
  </div>

JS:

if ($(".sonuc").has(":contains('text1')").length) {
  $('.sonuc').parent().addClass('hobi')
}

它的工作但添加hobi类所有父div。但我想只添加text1的父div。我该如何解决?

8 个答案:

答案 0 :(得分:17)

您可以使用:contains选择器以及所需的div选择器:

 $('.views-row:contains(text1)').addClass('hobi');

<强> Working Fiddle

答案 1 :(得分:15)

jquery selector :contains()匹配包含该字符串的任何元素。我建议使用.filter()

$(".sonuc span").filter(function() {
  return this.innerText === "text1";
}).parents("div.views-row").addClass("active");
.active {
  background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="views-row views-row-10 views-row-even views-row-last">
  <div class="sonuc">
    <span>text1</span> 
  </div>
</div>
<div class="views-row views-row-11 views-row-even views-row-last">
  <div class="sonuc">
    <span>text2</span> 
  </div>
  <div class="views-row views-row-11 views-row-even views-row-last">
    <div class="sonuc">
      <span>text11</span> 
    </div>

答案 2 :(得分:10)

尝试使用不带if语句的代码,在此上下文中完全没有必要。

$(".sonuc").has("span:contains('text1')").parent().addClass('hobi')

答案 3 :(得分:4)

您可以在一个过滤器中找到正确的元素:

$(".sonuc:contains('text1')").parent().addClass('hobi');

或者如果你的意思是第一个父母,那么只需使用:eq()

$(".sonuc:eq(0)").parent().addClass('hobi');

答案 4 :(得分:1)

您正在尝试查找sonuc的父级,但仅将课程添加到sonuc

if ($(".sonuc").has(":contains('text1')").length) {
  $('.sonuc').addClass('hobi')
}

答案 5 :(得分:1)

只需在jquery中添加first()即可

if ($(".sonuc").has(":contains('text1')").length) {
  $('.sonuc').first().parent().addClass('hobi')
}
.hobi{
color:red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="views-row views-row-10 views-row-even views-row-last">    
  <div class="sonuc">        
    <span>text1</span>  
  </div>
</div>
<div class="views-row views-row-11 views-row-even views-row-last">    
  <div class="sonuc">        
    <span>text2</span>  
  </div>

答案 6 :(得分:1)

结合你已经拥有的东西。

$('.sonuc').has(":contains('text1')").parent().addClass('hobi');

也许测试文本不是一个好主意,它可能会改变......

获取一组元素的第一个元素:

$('.sonuc').eq(0).parent().addClass('hobi');

$('.sonuc:eq(0)').parent().addClass('hobi');

答案 7 :(得分:0)

更简单直接的方式,不使用:contains.filter()

$('.sonuc > span:first').parent().addClass('hobi');

它选择.sonuc类下的第一个直接后代范围,然后使用.parent()选择父级,并在其中添加“.hobi”类。

<强> Working JSFiddle Demo


$('.sonuc > span:first').parent().addClass('hobi');
.hobi {
  background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<div class="views-row views-row-10 views-row-even views-row-last">
  <div class="sonuc"> <span>text1</span>

  </div>
</div>
<div class="views-row views-row-11 views-row-even views-row-last">
  <div class="sonuc"> <span>text2</span> 
  </div>
</div>