2016-05-17 5 views
2

ich einen Code so geschrieben habe, nur für das Problem mit der if-Anweisung:

$("ul.pick").click(function(){ 
     var kid = $(this).find("li.contactIn"); 
     kid.addClass("current"); 
     var parent = kid.parent(); 
     if(parent == $(this)) 
      { 
      parent.addClass("something"); 
      } 
    }); 

So ul.pick eine Menütaste ist, li. contactIn ist sein Kind, das den Inhalt speichert, der angezeigt werden soll. Das Problem liegt innerhalb der if-Anweisung. Was habe ich falsch gemacht? Ich versuche den Code zu schreiben, der prüfen wird ob aktuell li heruntergezogen wird. ist diejenige, auf die ich gerade klicke. Wenn ja, sollte der Code einfach hochziehen. Wenn nicht, li. sollte heruntergezogen werden. Vielen Dank im Voraus :)

+3

Sie Referenzen vergleichen. Da $ (this) ein brandneues jQuery-Objekt ist, werden sie niemals alle übereinstimmen. Verwenden Sie die .is() - Funktion, um es zu korrigieren: http://api.jquery.com/is/ – nurdyguy

Antwort

3

Das Problem ist, dass die Verwendung von $(this) den jQuery-Konstruktor aufruft und ein jQuery-Objekt erstellt. Das Vergleichen von Objekten untereinander ist in JavaScript immer falsch. Sie müssen das tatsächliche Element vergleichen.

Hier ist ein vollwertiges Demo den Klick zeigt die Klassen Hinzufügen

$("ul.pick").click(function(){ 
 
    var kid = $(this).find("li.contactIn"); 
 
    kid.addClass("current"); 
 
    var parent = kid.parent(); 
 
    if(parent[0] == this) //compare elements 
 
    { 
 
     parent.addClass("something"); 
 
    } 
 
});
.something { color: red; } 
 
.current { border: 1px solid red; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<ul class="pick"> 
 
    <li class="contactIn">contactIn</li> 
 
</ul>

+0

Was bedeutet [0]? Und es scheint nicht zu funktionieren. –

+0

@ JakubMałojło - '[0]' greift auf das zugrundeliegende native Element des jQuery-Objekts zu. Was funktioniert nicht? –

+0

Es fügt einfach nicht die Klasse zum Element geklickt –