2009-07-13 6 views
0

Ich möchte mehr von meinem jQuery-Code "funktionalisieren", anstatt kleine eigenständige Schnipsel zu schreiben. Hier ist ein Beispiel. Lassen Sie uns sagen, dass ich einige li haben, dass ich als Trigger verwenden möchten, etwa so:Eine andere jQuery Noob Frage über Funktionen

<li class="alpha-init" id="a-init">A</li> 
<li class="alpha-init" id="b-init">B</li> 
<li class="alpha-init" id="c-init">C</li> 

Und einige Sachen, die ich auf diesen Trigger Klicks in Korrespondenz verstecken und zeigen möchten, wie so:

<ul id="a-sub" class="alpha-popdown"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
</ul> 

<ul id="b-sub" class="alpha-popdown"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
</ul> 


<ul id="c-sub" class="alpha-popdown"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
</ul> 

Wenn ich für jeden Fall ein wenig Schnipsel schreiben wollte, könnte ich tun:

$('li.alpha-init #a-init').click(function(){ 
    $('ul#a-sub').slideToggle(200); 
} 

das bedeutet aber, wie viele Schnipsel zu schreiben, da es Sätze von Links und Untermenüs sind. Wie kann ich das in eine Funktion schreiben? Ich möchte nicht "einen Tag lang essen", also wäre eine Erklärung, wie Sie sich fühlen, sehr geschätzt. Vielen Dank!

Antwort

3
$('li.alpha-init').click(function(){ 
    $('ul#'+this.id.substr(1) + "-sub").slideToggle(200); 
} 
+3

Wenn Sie die String-Manipulation nicht tun möchten, wäre dies ein Fall, in dem ich den zugehörigen UL-ID-Wert im Attribut 'rel' der Alpha-init-Elemente speichern und dann den obigen substr-Aufruf ersetzen würde .attr ("rel") –

+0

Das ist ausgezeichnet. Ich dachte an alles andere, wie Arrays und jedes(), aber das funktioniert großartig. Vielen Dank. – nickmjones

1

Haben Sie darüber nachgedacht, jQuery UI Tabs dafür zu verwenden? Es klingt fast genau wie du willst. Sie können die Tabs nur anders formatieren als standardmäßig!

+0

jQuery UI hat einige wirklich nette Tricks, aber es kann auch für einfache Effekte Overkill sein, und es hilft auch nichts, "labrobothead" hier etwas zu lernen. –

+0

Wahr. Obwohl UI Tabs der richtige Weg sein können, hängt es von seinen Anforderungen ab. –

+0

Ich benutze jQuery UI für dieses Projekt für ein paar Dinge, aber der Overhead ist furchtbar steil. Ich hatte gehofft, immer mehr Plugins und Funktionen zu entwickeln, und das schien mir ein gutes Gedankenproblem zu sein, um mir den Weg zu ebnen. – nickmjones

0

Zunächst einmal sollten IDs auf Ihrer Seite eindeutig sein. Sie müssen nur den Selektor $('#a-init') verwenden, um darauf zuzugreifen.

würde ich schreiben wie so (für jedes Element):

html:

<li class="alpha-init" id="a-init"> 
<div>A</div> 
<ul id="a-sub" class="alpha-popdown"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
</ul> 
</li> 

Und dann die jquery schreiben wie:

$('li.alpha-init').click(function(){ 
    $(this).children('ul.alpha-popdown').slideToggle(200); 
} 

Die Grundidee wäre zu verwenden die Methode $ (this), um auf das Element zuzugreifen, auf das geklickt wurde, und wählen Sie Ihr Menüelement relativ zum übergeordneten Element aus.

+0

Sehen Sie sich noch einmal sein Markup an. Ich bin mir nicht sicher, ob die Struktur seines Markups die gleiche ist wie die von Ihnen erwähnte Lösung. –

+0

Es ist wahr. Je nachdem, was er tut, kann meine Markup-Änderung den tatsächlichen Effekt/das Layout/die Bedeutung der Seite verändern. Artems Lösung ist die beste hier. –

0

Ich habe eine Kombination aus Artem Barger und John Sheehan Code verwendet. Vielen Dank für Ihre Hilfe. jetzt schlafe ich ein!

+0

Wäre nett, wenn Sie meinen Namen korrigieren. ;) –