2014-12-17 10 views
13

HTML:Finden erste Eltern und fügen Klasse über jQuery

<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') 
} 

Seine Arbeit aber hobi Klasse alle übergeordneten div-Tags hinzufügen. Aber ich möchte nur das Elternteil von text1 hinzufügen. Wie kann ich es reparieren?

+0

seinen Code selbst ist das Hinzufügen hobi sowohl für die divs aber das Problem ist es seine Check-in both.so ist das Hinzufügen, wenn contion nicht ist richtig, denke ich. –

+0

@Bariskonat können Sie klären, ob Sie alle Instanzen übereinstimmen müssen, die den Text 'text1' und nur diesen Text haben, oder wenn Sie zum Beispiel auch nach' text11' und 'text1 abc' suchen müssen? –

Antwort

10

Versuchen Sie, den Code ohne if Anweisung zu verwenden, das ist in diesem Kontext völlig unnötig.

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

Sie versuchen, Eltern von sonuc zu finden, aber Klasse sonuc nur

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

jquery Selektor :contains() Spiel jedes Element hinzufügen, die die Zeichenfolge enthält. Ich schlage vor, .filter() zu verwenden:

$(".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>

+1

das war was ich posten wollte. – Jai

+1

das ist, was OP verwenden sollte. –

17

Sie :contains Wähler zusammen mit den erforderlichen div Selektor verwenden:

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

Working Fiddle

+2

Ein kleines Problem mit ': contains 'enden Sie mit dieser [Geige] ( –

+1

), die nicht das DOM OP ist. Diese Lösung eignet sich für das derzeit zur Verfügung gestellte DOM. –

4

Sie das richtige Element finden in einem Filter:

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

Oder wenn Sie wirklich das erste Elternteil bedeuten, dann benutzen Sie einfach :eq():

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

Gerade first() in Ihrem jquery

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>

1

Fügen Sie einfach kombinieren, was Sie bereits bekam .

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

vielleicht ist es nicht eine gute Idee, Text zu testen auf, könnte es ändert ...

, um das erste Element einer Reihe von Elementen erhalten Sie folgende Möglichkeiten:

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

oder

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

Ein viel einfacher einfacher Weg ohne Verwendung :contains, .filter() Ist

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

es die erste direkte Nachkomme Spanne unter .sonuc Klasse auswählt und dann durch Verwendung .parent() wählt sich übergeordnete und fügt die Klasse ‚.hobi‘ darin.

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>

Verwandte Themen