2016-05-22 13 views
1

ich li class meine wp_nav_menu mit dem folgenden einfachen Code ohneJQuery addClass wp_nav_menu ist sehr langsam

$('#menu-navigasjon').children('li').addClass('liparent'); 

Wenn Sie meine Website besuchen http://annalidesign.com, Wordpress wird zunächst erzeugen, um das ursprüngliche Navigationsmenü (vertikal) hinzugefügt habe liparent-Klasse, und eine Split-Millisekunde danach wird der Jquery-Code ausgeführt und addiert die "liparent" -Klasse, so dass es horizontal wie ich will.

Das Problem ist, dass ich sehe, wie die Navigation einen Bruchteil einer Sekunde aussieht, bevor die neue Liparent-Klasse hinzugefügt wird. Kann ich etwas tun, um dies zu vermeiden? Ich habe versucht, das Jquery-Skript direkt nach dem HTML für die Navigationsleiste einzufügen, aber die ursprüngliche vertikale Navigationsleiste zeigt immer noch eine halbe Millisekunde zuvor.

Ich habe versucht, mit Walker-Funktion, mit dem folgenden Code ohne Glück, weil ich nicht wissen, wie Sie Klassen zu dem vorhandenen li-Element, das Wordpress erzeugt, hinzufügen. Mein Code entfernt alle li-Klassen, die Wordpress generiert und fügt nur eine Klasse hinzu. Das ist nicht was ich will.

+0

Ich denke, Sie müssen den vorhandenen Walker von Grund auf neu schreiben oder finden, wo sich der ursprüngliche Walker befindet und modi fy das (wenn Sie ein Thema verwenden) –

Antwort

0

Sie könnten das Menü zunächst ausblenden und dann jQuery verwenden, um es anzuzeigen, sobald die Funktion addClass ausgeführt wurde. Hier ist eine abgespeckte Testfall, der setTimeout verwendet eine Seite geladen zu simulieren, bevor jQuery läuft Codepen: http://codepen.io/SteveClason/pen/eZqBrw):

HTML

<div class="nav"> 
    <div class="ulwrap"> 
    <p>This one doesn't blink.</p> 
    <ul id="menu-navigasjon"> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
     <li>Item 4</li> 
     <li>Item 5</li> 
    </ul> 
    <p>But this one does.</p> 
    <ul id="menu-navigasjon2"> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
     <li>Item 4</li> 
     <li>Item 5</li> 
    </ul> 
    </div> 
</div> 

CSS

.liparent { 
    color: red; 
} 
#menu-navigasjon { 
    display: none; 
} 

JavaScript

// This menu is initially hidden by CSS. 
$('#menu-navigasjon').children('li').addClass('liparent'); 
$('#menu-navigasjon').css('display', 'block'); 

// This menu initially displays then is altered by JavaScript. There's a timer to simulate a page loading. 
function blink() { 
    $('#menu-navigasjon2').children('li').addClass('liparent'); 
} 
setTimeout(blink, 1000); 
+0

Ich habe es versucht. CSS im Kopf, vor der jQuery hinzugefügt. Aber es versteckt nur die Navigation. – Anna

+0

Ich habe auch versucht, zuerst die Navigation zu verstecken, dann fügen Sie die Klasse hinzu und zeigen Sie es dann. '$ ('# menu-navigasjon'). hide(); $ ('# menu-navigasjon'). Children ('li'). AddClass ('liparent'); $ ('# menu-navigasjon'). Show(); 'ohne Glück. – Anna

+0

Die zweite Lösung in Ihren Kommentaren würde das gleiche Blinzeln haben, weil zuerst die Seite mit dem unveränderten '# menu-navigasjon 'geladen würde, dann nachdem die Seite geladen wurde, würde jQuery es verstecken, die Klasse hinzufügen und dann zeigen - im Wesentlichen die Das gleiche hast du jetzt. Aber ich verstehe nicht, warum das Nav mit css versteckt wird und dann mit JS enthüllt wird, nachdem die addClass nicht funktioniert. Ich sehe das Problem nicht auf der URL oben - hast du es behoben? –