2017-06-02 2 views
-2

Einfache hasclass und this.addclass nichtWarum ist diese jQuery funktioniert nicht

if ($('.sidebar-menu-container li').hasClass('current-menu-item')) { 
    $(this).addClass('expanded'); 
} 

Link to codepen.

+0

Es wäre hilfreich, wenn Sie das, was Sie erreichen wollen. – Catalyst

+0

Bitte zeigen Sie alle relevanten Code in der Frage. Siehe [MCVE]. Fragen sollten in sich geschlossen sein. Wir sollten die Website nicht einfach verlassen müssen, um die Grundlagen Ihres Problems zu überprüfen. Nehmen Sie sich auch etwas Zeit, um [ask] – charlietfl

+1

zu lesen, Sie können eine Zeile '$ ('. Sidebar-menu-container li.current-menu-item') verwenden. AddClass ('expanded')' – guradio

Antwort

2

Sie verwendet haben $(this) innerhalb document.ready arbeitet so die $(this) bezieht sich auf das Dokument nicht die ($('.sidebar-menu-container li') .using this außerhalb jeder Funktion bezieht sich auf das globale Objekt

für Ihren Code zu arbeiten

$(document).ready(function($) { 
 

 
$('.sidebar-menu-container li').each(function(){ 
 
if ($(this).hasClass('current-menu-item')) { 
 

 
    $(this).addClass('expanded'); 
 
    } 
 
}) 
 
    
 
});
.expanded { 
 
    background:red !important; 
 
    border: 1px solid green; 
 
} 
 
li { 
 
    background: #ccc; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="sidebar-menu-container"> 
 
<li class="current-menu-item">asdasdasdasd</li> 
 
<li>asdasdasdasd</li> 
 
</div>

oder einfach

jQuery(document).ready(function($) { 
 

 
$('.sidebar-menu-container li.current-menu-item').addClass('expanded') 
 
    
 
});
.expanded { 
 
    background:red !important; 
 
    border: 1px solid green; 
 
} 
 
li { 
 
    background: #ccc; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="sidebar-menu-container"> 
 
<li class="current-menu-item">asdasdasdasd</li> 
 
<li>asdasdasdasd</li> 
 
</div>

1

Der Selektor $('.sidebar-menu-container li') mehrere Elemente zurückkehrt, so dass, wenn eines dieser Elemente, die Klasse hat current-menu-item es true sein wird. Sie haben eine Schleife dafür verwenden, oder besser noch:

$('.sidebar-menu-container li.current-menu-item').addClass('expanded'); 

Der obige Code alle li mit .current-menu-item Klasse auswählt und expanded Klasse für sie hinzufügen. Keine Schleife oder Bedingung benötigt, jQuery tut es für Sie.

1

Ihr Element mehr Elemente zurück, die Art und Weise ist es nicht diesen

jQuery(document).ready(function($) { 
    $("li").click(function(){ 
    if ($(this).hasClass('current-menu-item')) { 
    $(this).addClass('expanded'); 
    } 
    }); 
}); 
3

$('ul.sidebar-menu-container li.current-menu-item').addClass('expanded')
.expanded { 
 
    background:red !important; 
 
    border: 1px solid green; 
 
} 
 
li { 
 
    background: #ccc; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="sidebar-menu-container"> 
 
<li class="current-menu-item">asdasdasdasd</li> 
 
<li>asdasdasdasd</li> 
 
</ul>

  1. Hinweis arbeiten versuchen, dass die Eltern von LI sind UL
  2. Keine Notwendigkeit für Iteration
1

Ich glaube, Sie in Ordnung sein würde zu verwenden:

$('.sidebar-menu-container li.current-menu-item').addClass('expanded'); 

Sie brauchen nicht die, wenn.

+0

Oh ja, wie Guradios Vorschlag! – Mark

0

$(document).ready(function() { 
 
$('.sidebar-menu-container li.current-menu-item').addClass('expanded'); 
 
});
.expanded { 
 
    background:red !important; 
 
    border: 1px solid green; 
 
} 
 
li { 
 
    background: #ccc; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="sidebar-menu-container"> 
 
<li class="current-menu-item">asdasdasdasd</li> 
 
<li>asdasdasdasd</li> 
 
</div>

+0

Ihr 'if()' macht wenig Sinn. – charlietfl

+0

Warum nicht? Er möchte, dass das spezifische div bestimmte Klassen enthält – SilverSurfer

+1

Alles, was Sie tun, ist '$ ('. SomeClass'). HasClass ('someClass')' ... warum würden Sie das jemals brauchen? Natürlich hat es diese Klasse ...Es ist in der Original-Selektor – charlietfl