jQuery
Stellen Sie sicher, dass Sie es entweder bei DOM-Bereitschaft oder am Ende der Seite ausführen.
(function($) {
var allPanels = $('.accordion > dd').hide();
$('.accordion > dt > a').click(function() {
allPanels.slideUp();
$(this).parent().next().slideDown();
return false;
});
})(jQuery);
HTML
<dl class="accordion">
<dt><a href="">Panel 1</a></dt>
<dd>Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.</dd>
<dt><a href="">Panel 2</a></dt>
<dd>Donec nec justo eget felis facilisis fermentum. Aliquam porttitor mauris sit amet orci. Aenean dignissim pellentesque felis.</dd>
<dt><a href="">Panel 3</a></dt>
<dd>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet nibh nec urna. In nisi neque, aliquet vel, dapibus id, mattis vel, nisi. Sed pretium, ligula sollicitudin laoreet viverra, tortor libero sodales leo, eget blandit nunc tortor eu nibh. Nullam mollis. Ut justo. Suspendisse potenti.</dd>
</dl>
SCSS
Entschuldigung, wenn Sie SASS nicht verwenden. Sollte ziemlich einfach zu konvertieren sein.
.accordion {
margin: 50px;
dt, dd {
padding: 10px;
border: 1px solid black;
border-bottom: 0;
&:last-of-type {
border-bottom: 1px solid black;
}
a {
display: block;
color: black;
font-weight: bold;
}
}
dd {
border-top: 0;
font-size: 12px;
&:last-of-type {
border-top: 1px solid white;
position: relative;
top: -1px;
}
}
}
Etwas fortgeschrittener, verhindert das Schließen des aktiven Panels
Danke Chris. Ich suchte nach einer einfachen, leichtgewichtigen Alternative zu diesem ganzen jQueryUI-Kram.
Tolle Weitergabe, aber beide Demos funktionieren gleich (Klicken auf ein neues Panel schließt das vorherige). Ich glaube, eine der Demos sollte die Möglichkeit haben, mehrere Panels gleichzeitig zu öffnen.
Hier ist eine leicht modifizierte Version dieses Akkordeons: http://codepen.io/thirdtiu/pen/uDyxr
Erstes Panel geöffnet, um anzuzeigen, dass es sich um ein Akkordeon handelt..
und die Möglichkeit hinzugefügt, einen Reiter zu öffnen/schließen.
Das funktioniert gut nur mit Tags, aber was, wenn ich ein Bild mit einem Tag einfüge? Ich habe einige Codezeilen hinzugefügt, aber jetzt, wenn ich auf ein Div klicke, erscheinen/verschwinden die Bilder, aber kein Inhalt (Tags) wird angezeigt.
Sehr seltsam ... das ist der Code, den ich verwendet habe. Jede Hilfe für jemanden, der JQuery lernt, wäre sehr willkommen!
$(document).ready(function() {
$(‘#skills-services p:not(:first)’).hide();
$(‘#skills-services img:not(:first)’).hide();
$(‘#skills-services h3’).click(function(){
$(‘#skills-services p’).slideUp();
$(‘#skills-services img’).slideUp();
$(this).next(“p”).slideToggle(“normal”)
$(this).next(“img”).slideToggle(“normal”)
return false;
});
});
Ich habe versucht, diesen Codeblock zu ändern, um Bilder einzuschließen, aber jetzt erscheinen/verschwinden nur die Bilder und der Inhalt (Tags) ist nirgends zu sehen.
Sehr seltsam, aber hier ist der Code, den ich verwendet habe. Jede Hilfe wäre sehr willkommen für jemanden, der neu bei JQuery ist.
Verwenden Sie Divs wie
.accordion {margin: 50px; position : relative; }
.dt, .dd {
padding: 10px;
border: 1px solid black;
border-bottom: 0;
&:last-of-type {
border-bottom: 1px solid black;} }
.a {
display: block;
color: black;
font-weight: bold; }
.dd {
border-top: 0;
font-size: 12px;
&:last-of-type {
border-top: 1px solid white;
position: relative;
top: -1px;
} }
$(function(){
(function($) {
var allPanels = $(‘.dd’).hide();
$(‘.a’).click(function() {
allPanels.slideUp();
$(this).parent().next().slideDown();
return false;
});
})(jQuery);
});
Oh, egal.. Ich habe das Tag nicht geschlossen
Gibt es dafür eine Demo?
Ist es möglich, dass es sich weiter in Unterüberschriften zusammenklappt?
Also im Grunde, wenn Sie eine Überschrift hätten
d. h.
> Hauptattraktionen, auf die Sie klicken, und die sich aufklappt
> CN Tower, und wenn Sie darauf klicken, klappt es auf
> eine kurze Beschreibung des CN Tower
Ist so etwas möglich?
Ich habe eine gemacht, um die nächste beim Klicken auf dieselbe hochzufahren ... Ich bin sicher, dass es eine sauberere Lösung gibt, aber ich kann sie nicht herausfinden. Wenn Sie posten, danke.
Um ein Element durch erneutes Klicken schließen zu können, verfolgen Sie einfach das letzte Element.
Wie kann ich das mit der dynamischen Navigation von WordPress verwenden?
Danke.
Das gibt mir weitere Ideen für Akkordeons.
Großartig! Genau das, wonach ich gesucht habe!
Hallo, danke für das Tutorial, genau das, wonach ich gesucht habe.
Nur eine kurze Frage: Wie mache ich die Tabs einklappbar, damit alle geschlossen werden können?
Ich habe versucht, 'collapsible: true' hinzuzufügen, aber ohne Erfolg.
Danke
Das habe ich gemacht
Funktioniert bei mir...
Gr. Bert
Hallo,
Um den "Sprung"-Fehler zu vermeiden, fügen Sie einfach hinzu:
position : relative;in einem übergeordneten Div.Fabrice
position : relative;bei der Definitionenliste selbst würde auch den Trick machen und man braucht so kein zusätzliches Div : )Ich habe eine noch einfachere Lösung gefunden
Sie müssen die Akkordeon-Klickfunktion nicht überschreiben, da durch den Aufruf von accordion("activate", false) alle Teile geschlossen werden (und das Verstecken hilft, dass dies vom Benutzer nicht gesehen wird). Ich habe auch collapsible auf true gesetzt ... weiß nicht, ob das notwendig ist.
Es hat mein Problem gelöst.
Vielen Dank.
Weiter so...
Einfach und effektiv!
Der beste Weg, Seitenverhebungen zu vermeiden, ist, gar keine Dummy-Links (a href="#” oder a href=”") zu verwenden. a hrefs haben viel SEO-Gewicht, daher möchten Sie sie vielleicht verwenden, um tatsächlich auf andere Seiten/Websites zu verlinken, nicht um Verhaltensweisen auszulösen.
Um Verhaltensweisen auszulösen, können Sie jeden anderen HTML-Link verwenden, ja, das wird funktionieren, alles, was Sie tun müssten, ist "cursor:pointer;" zu Ihrer CSS-Datei hinzuzufügen und das war's. Und ja, das funktioniert auch in IE6.
Ersetzen Sie also in Chris' Beispiel oben einfach
<a href=””></a>
mit
<span></span>
Hallo Ricardo,
guter Tipp. Ich bin keineswegs ein Entwickler und lerne gerade diese Dinge.
Wie würdest du das Span verwenden?
<dt><span>„Wie wählen Sie den Kaffee aus?“.</span></dt>
oder
<dt><span class="spanclass">„Wie wählen Sie den Kaffee aus?“.</span></dt>
Und dann ersetzen
$('.accordion > dt > a').click(function() {
für
$('.accordion > dt > span').click(function() {
Dies wird auf maydaycoffee.com.au für FAQs verwendet.
Hallo,
Leider bleibt der "Sprung" bestehen, zumindest in IE7, egal ob man ein position: relative; auf ein übergeordnetes Div anwendet oder Dummy-Links durch echte Links oder Spans ersetzt – mit denen die Anzeige, dass die Zeilen Links sind, dem Benutzer nicht klar ist. Die Überschriften müssen dem Benutzer unmissverständlich schreien: Klick mich, ich bin ein Link!
Wenn jemand eine Lösung finden könnte, um diesen fiesen Sprung zu beseitigen (auch in IE7) und sie hier posten würde, wäre ich sehr dankbar.
Die Rückgabe von false sollte den Sprung verhindern // aber Sie können auch Folgendes tun: Ein Ereignis zur Klickfunktion hinzufügen und dann sofort das Standardverhalten verhindern /
function accordian(){
$(‘.accordian dd’).hide();
$(‘.accordian dt a’).click(function(event){ // <– Ereignis hinzufügen
event.preventDefault(); // <— Sprung verhindern
$('.accordian dt a').click(function(){
$('.accordian dd').slideUp();
$(this).parent().next().slideDown();
});
});
}
Bezüglich des Sprungs...
Wenn der zu animierende Container (die dd) einen Rand oder Polsterung hat, scheint dies den Sprung stark zu erhöhen.
Wenn Sie Ihren Inhalt in a einfügen und die Polsterung stattdessen darauf anwenden und nicht auf die, scheint dies den Sprung stark zu reduzieren.
Text
Ups ... hoffe, das funktioniert :-/
<dd&rt<p&rtTEXT</p&rt</dd&rt
Nein .. Ich bin offensichtlich dumm :-/ Jedenfalls, fügen Sie einfach das P in das DD ein :-)
Ich suche schon seit einiger Zeit nach einem einfachen Akkordeon-Skript und das könnte genau das Richtige sein. Andere, die ich gefunden habe, sind sehr kompliziert, aber dieses hier ist schön und leichtgewichtig, danke.
Hier ist ein sehr einfaches und schönes Skript – http://www.sebastiansulinski.co.uk/demos/jquery-accordion/
Hallo Leute, das ist großartig – auf jedem Browser außer IE7.
Ich habe jeden Hack ausprobiert, den es gibt, um es zum Laufen zu bringen, aber es funktioniert einfach nicht. Irgendwelche Hinweise?
Ich entschuldige mich, nach stundenlangem Schlafentzug habe ich einen neuen Ansatz versucht. Es stellte sich heraus, dass die IE7-Version, die ich auf meinem Mac installiert hatte (mit Winebottler), kein Javascript geladen hat und nicht modifiziert werden konnte.
Das Skript funktioniert immer noch einwandfrei wie beabsichtigt.
Toller Artikel, ich benutze den folgenden Code
Jetzt wird das gesamte Menü auf einmal geschlossen, ich möchte, dass ein Menü geöffnet ist und die restlichen geschlossen bleiben, wie kann das erreicht werden? Oder ein langsames Menüschließen tut es auch.
Danke fürs Teilen...
Hier ist ein weiterer Link für ein anderes jQuery-Akkordeon
http://www.bijusubhash.com/blog/create-a-simple-accordion-with-jquery-and-css
OMG! Ich hab's.... Vielen Dank.
möchte wissen, ob Sie noch Kommentare in diesem Thread beantworten, einfaches jQuery-Akkordeon
danke
Großartig, einfach, danke!
Könnten Sie Cookies unterstützen und das Öffnen von <dt> speichern?
Hallo, ist es möglich, dieses Menü mit mehr als einem dd-Tag zu implementieren? Ich verstehe, dass es gegen Definitionenlisten verstößt... Kann ich stattdessen li-Tags verwenden? Entschuldigung, ich bin ziemlich neu in jQuery, jede Hilfe wäre sehr willkommen. Die Liste, die ich implementieren möchte, hätte die Struktur
Danke Jungs!
Ändern Sie sie in DIVs und packen Sie die Listen hinein, Kumpel. :-)
Danke. Gracias desde Colombia. Es ist sehr hilfreich.
Vielen Dank. Wirklich klarer Artikel.
Danke für das Tutorial, es hat mir wirklich sehr geholfen.
Ich habe einen seltsamen Fehler mit diesem Code, wie er ursprünglich gepostet wurde. Wenn Sie auf ein Menüelement klicken, um es zu erweitern, wird es erweitert, aber wenn Sie auf dasselbe Menüelement klicken, um es zu schließen, springt es geschlossen und dann wieder auf.
Weiß jemand, wie man dieses Bouncen ausschaltet?
Verdammt, ich habe gerade eine Stunde damit verbracht, das zum Laufen zu bringen, aber diesen nervigen Sprung kann ich nicht loswerden ... habe alle Kommentare gelesen und bekomme immer noch den Sprung ... ok, zurück zum Reißbrett. Es muss etwas Einfacheres geben.
Fügen Sie position : relative; zur Klasse .accordion hinzu .. das behebt den Sprung
Ich bestätige Marz' Lösung. Danke!
Großartiges Skript..
Gibt es eine Möglichkeit, das erste Element im Akkordeon beim Laden der Seite geöffnet zu haben, anstatt alles zu verstecken?
var allPanels = $(‘.accordion > dd’).hide().slice(1).show();
http://viralpatel.net/blogs/demo/jquery-accordion-menu-example/
Ich habe dasselbe Problem wie Josh (26.01.2012)
Weiß jemand, wie man dieses Bouncen ausschaltet?
Es wäre schön, die Option zu haben, das gerade geöffnete Menüelement schließen zu können
Entfernen Sie # aus dem Link-Tag und verwenden Sie stattdessen ' href="js:;" '.
Hallo!
Danke für das Posten dieses erstaunlichen Tutorials, es ist wirklich einfach, ich musste nur wissen, ob es möglich ist, dieses Akkordeon dynamisch zu machen, zum Beispiel, wenn ich an einer E-Commerce-Website arbeite und mehr als ein Element habe, ist es möglich, während ich durch das Akkordeon scrolle, das Panel für den Elementnamen zu öffnen, etwas wie die Bestellung des Akkordeon-Panels zu geben. Jede Hilfe.
Entschuldigung für mein Englisch. Danke
@Josh und @Bacca – Sie können das Ein- und Ausklappen beheben mit diesem
Fast ähnlich wie Ihre Lösung, diese funktioniert für mich und ich reiche sie als alternative Lösung ein
Danke Davey! Das löst das Problem, wenn Sie auf ein offenes Tab klicken
Wow Davey, du hast mein Problem gelöst, jedes Element mit nur einer einzigen Codezeile schließen zu können! Genial!
Hallo Davey,
Danke, dass Sie sich die Zeit genommen haben, sich das anzusehen, leider habe ich diese Lösung ausprobiert und sie war nicht erfolgreich.
Beim Laden der Seite sind alle dd offen und das Klicken auf die Links in den dt tut nichts?
Irgendwelche Ideen??
Hey Bacca,
Wenn Sie aus meinem vorherigen Kommentar kopiert und eingefügt haben, erstellt die Formatierung ein ungültiges Zeichen ”. Ich habe die vorherige Demo auf jsfiddle hier geforkt
http://jsfiddle.net/8MXAu/
Versuchen Sie das. Ich habe es auf jsfiddle getestet und es war in Ordnung. Dies würde auch davon ausgehen, dass Sie denselben HTML- und CSS-Code wie im Beispiel verwenden.
Danke Davey, das hat großartig funktioniert und ich benutze anderes CSS als Chris. Ich habe das SCSS in das alte Format geändert und von dort aus angepasst, um es an mein Thema anzupassen. Danke nochmal!
Danke Davey! Das hat großartig funktioniert und das Sprungproblem behoben :)
Danke für diesen Code!
Davey-
Ich bin gerade auf diese Demo gestoßen. Das Original funktioniert einwandfrei, außer dem "Sprung", Ihre Korrektur bricht komplett zusammen. Haben Sie eine Ahnung, warum das so sein könnte?
Hey Jon,
Schauen Sie sich den jsfiddle-Link hier an
http://jsfiddle.net/8MXAu/
Wenn Sie die Korrektur aus meinem vorherigen Kommentar kopiert haben, bricht sie wegen eines ungültigen „-Zeichens zusammen. Haben Sie sie so getestet?
Danke Davey,
Ich hatte das ungültige Zeichen bemerkt, nachdem ich es kopiert hatte, dachte, ich hätte sie alle geändert, aber muss eines übersehen haben.
Jedenfalls habe ich den Code von Grund auf neu eingegeben (was ich von Anfang an hätte tun sollen) und er funktioniert perfekt, vielen Dank.
Vielen Dank, Kumpel. Deine Korrektur funktioniert. Cheers
Dieses Snippet hat mir sehr geholfen. Danke fürs Teilen.
Bin kein jQuery-Experte,
brauche mehrere Akkordeons in 6 Spalten, irgendwelche Ideen, wie man das machen kann? mein jsfiddle http://jsfiddle.net/FL7q3/
Das ist großartig!
Wie zeige ich nur ein Panel gleichzeitig an?
Gibt es eine Möglichkeit, ein window.scrollTo hinzuzufügen? Ich bin nicht sehr versiert in Javascript/jQuery, daher bin ich mir nicht sicher, wo ich es platzieren soll.
Ich habe dies versucht, um zu ermöglichen, dass Akkordeon-Registerkarten (dt) nach dem Öffnen einklappbar sind
Dies ist eine der besseren Akkordeon-Demonstrationen. Schön und sauber.
Schönes Tutorial...
Hat jemand ein [+] und [-] in dieses Akkordeon integriert, entweder per Javascript oder Bildern?
Das wäre wirklich, wirklich cool, wenn das jemand gemacht hätte...!
Hallo MP,
Ich habe mein Akkordeon mit Plus- und Minuszeichen gemacht, aber es gibt einen kleinen Fehler. Wenn ich auf die Symbole klicke, springen sie. Gibt es eine Lösung für das Springen der Symbole?
Krish
Ich konnte das nicht zum Laufen bringen. Hauptsächlich, weil ich ein n00b bin und nichts von $ für jquery wusste.
Auch ein wenig jQuery-Lightbox-Magie, die ich verwende, verursachte einen Konflikt.
So wurde es behoben.
Ich habe meinen Kumpel , den ich für die Entwicklung nutze (und der spitze ist), gebeten, dies zu beheben, und wir haben dies auf maydaycoffee.com.au zum Laufen gebracht.
Das verwendete jQuery ist
CSS ist unten. Ich habe es von SCSS konvertiert. Wie gesagt, ich bin kein Entwickler/Designer, daher ist meine Syntax und wahrscheinlich auch meine Semantik SCH****E.
Großartig, das hat perfekt funktioniert. Danke fürs Teilen dieser Lösung!
Großartig !!! Cooler Code, um ein sehr einfaches jQuery-Akkordeon zu erstellen.
Gott segne dich, Chris!
Hallo, nur eine kurze Frage. Ich versuche, die Selektoren auf ul und li anstelle von dd dl und so weiter zu ändern. Aber es scheint nicht zu funktionieren. Irgendwelche Ideen?
Vielen Dank im Voraus
/Jeppe
Hallo nochmal,
vergessen Sie meine vorherige Frage. Ich habe sie gelöst, indem ich tatsächlich alle Elemente geschlossen habe :)
Ich habe jedoch eine weitere Frage. Wenn man möchte, dass das angeklickte Panel nach oben scrollt oder sichtbar wird. Wie würde ich das aus Ihrem Code machen?
Danke!
/Jeppe
Hallo,
Für diejenigen, die nach einem französischen Akkordeon-Tutorial suchen, hier ist ein großartiges: http://netmacom.fr/blog/webdesign/creer-un-menu-accordeon-avec-jquery.html
Um das erste anzuzeigen (vorherige Lösung eines Benutzers funktionierte nicht).
Ich habe gemacht
Äh, ignorieren Sie den vorherigen Beitrag, er ruiniert es.
Fügen Sie einfach diese Zeile unter der Zeile var allPanels hinzu
Es kann als grundlegend verwendet werden, aber nicht als fortgeschritten.
Meine Akkordeon-Version auf ihre einfachste Art. Gestalten Sie sie, wie Sie möchten. h3 kann durch alles ersetzt werden...
JQuery (Javascript):
$(document).ready(function() {
$(‘[id^=aContent]’).hide();
$(‘[id^=aContent]’).prev().click(function() {
$(‘[id^=aContent]’).hide(300);
if ($(this).next().is(“:visible”))
$(this).next().hide(300);
else
$(this).next().show(300);
});
});
CSS:
.aHeaders {/* Setzen Sie hier den Stil für Ihre Akkordeon-Überschriften... */}
.aContents {/* Setzen Sie hier den Stil für Ihre Akkordeon-Inhalte... */}
HTML:
<h3 class="aHeaders"><a href="#aContent1">Header 1</a></h3>
<div class="aContents" id="aContent1">
Inhalt1
</div>
<h3 class="aHeaders"><a href="#aContent2">Header 2</a></h3>
<div class="aContents" id="aContent2">
Inhalt2
</div>
<h3 class="aHeaders"><a href="#aContent3">Header 3</a></h3>
<div class="aContents" id="aContent3">
Inhalt3
</div>
Prost!
-Pierre-
Ich habe Pierres Schnipsel bearbeitet, um das erste Element beim Laden anzeigen zu lassen.
$(‘[id^=aContent]’).hide();
$(‘[id^=aContent]’).first().show();
$(‘[id^=aContent]’).prev().click(function() {
$(‘[id^=aContent]’).hide(500);
if ($(this).next().is(“:visible”)){
$(this).next().hide(500);
} else {
$(this).next().show(500);
}
});
Beste Grüße
@Kevin: Wenn Sie mehrere
dd-Elemente gleichzeitig öffnen möchten, machen Sie Folgendes:Brillant – danke Chris.
Ich habe eine aktive Klasse für die dt hinzugefügt. Kein starker Schreiber von jQuery, daher danke im Voraus an alle, die dies verbessern könnten.
Sie können es weiter vereinfachen, indem Sie die Funktion JQuery „.accordion()“ verwenden. Da Sie nicht viel mehr tun müssen, als es mit CSS zu gestalten. Alles, was Sie brauchen, sind ein paar Elemente innerhalb eines Containers und lassen Sie JQuery den Rest erledigen.
Es ist so einfach.
Ihr Tutorial hat mich zu SASS bekehrt. Danke!
Ich habe es zum Laufen gebracht! Es gibt jedoch eine Sache, die nicht richtig funktioniert und die ich nicht beheben kann. Wenn ich auf ein Panel klicke, öffnet sich die Beschreibung, aber während sie sich öffnet, ist die Breite kleiner. Wenn sie vollständig geladen ist, springt sie auf ihre volle Länge. Wie kann ich das beheben? http://michellecantin.ca/test/features/accordions/
Hallo, wie baue ich ein Akkordeon innerhalb eines Akkordeons? Bitte helfen Sie mir! Danke!
Sie würden verschachtelte Listen verwenden.
Super, hat auf Anhieb funktioniert, ich konnte sogar das CSS auf Anhieb wieder in „normal“ umwandeln. Ich benutze dieses Akkordeon für einen FAQ-Bereich. Für diejenigen, die mit Sass nicht vertraut sind, hier ist das CSS, das ich verwendet habe, es ist sehr ähnlich, aber zweifellos wurde jemand von diesem „&“ erwischt.
Hallo,
Kann mir jemand diese Zeile im Code erklären?
$(this).parent().next().slideDown();
Wenn sich „this“ auf $(‘.accordion > dt > a’) bezieht, dann würde sich diese Zeile nicht auf den Titel jedes Panels beziehen, sondern auf den Textabsatz im Panel, der angezeigt werden muss?
Ich bin mir auch nicht sicher, warum (function($) { })(jQuery); die gesamte Funktion umschließen muss, damit sie funktioniert.
Danke!
‚this‘ bezieht sich immer auf das aktuelle Objekt, um herauszufinden, was es ist, verwenden Sie
console.log( “was ist das? ” + $(this).parent() );
direkt vor oder direkt nach der von Ihnen zitierten Zeile und lesen Sie dann die Ausgabe aus der Konsole. Ich denke, im Akkordeon ist es das übergeordnete Element des angeklickten Objekts > der nächste Geschwisterteil dieses übergeordneten Objekts. Also der Anfang des nächsten Elements, das sich „öffnet“.
Ihre zweite Frage wird hier beantwortet
Stack Overflow, Antwort von Vivin Paliath – scrollen Sie nach unten für die Antwort
um es unklickbar zu machen, wenn es geöffnet ist
$j(‘.accordion > dt > a’).click(function() {
allPanels.slideUp();
if($j(this).parent().next().css(‘display’) != ‘block’){
$j(this).parent().next().slideDown();
return false;
}
});
Weiß jemand, wie man es so macht, dass man die „offene Schublade“ schließen kann? Ich benutze das auf einer Website für eine Klasse und mein Lehrer zieht Punkte ab, weil die „offene Schublade“ nicht schließen kann.
Vielen Dank im Voraus für Ihre Hilfe!
Wenn Sie damit meinen, dass alle Akkordeonabschnitte zu Beginn geschlossen sein sollen, können Sie Folgendes tun:
var allPanels = $( '.accordion > dd' ).hide();und das sollte den Inhalt von allem mit der Klasse .accordion ausblenden. Um nur das erste beim Laden anzuzeigen, fügen Sie nach dieser Zeile hinzu:
$('.accordion > dd').first().show();Wie füge ich das Plus-Minus-Zeichen hinzu?
Danke!
Fügen Sie eine Klasse zu dem Element hinzu, zu dem Sie die +-Icons hinzufügen möchten, und verwenden Sie dann etwas Ähnliches wie:
css
.notselected{
background: url(‘plusIcon.png) no-repeat;
background-position{ 98% 50%; /* horizontal, vertikal */
}
In der Haupt-JS/jQuery-Funktion
var allHeaders = $(‘h1.accHeader’).addClass(‘notselected’);
$(allHeaders).first().removeClass(‘notselected’);
Wobei h1.accHeader (in meinem Code) ein klickbarer Header ist (dt.a im Beispiel).
Und dann müssen Sie in Ihrer onclick-Funktion das Gegenteil tun:
allHeaders.addClass(‘notselected’);
$(this).removeClass(‘notselected’);
Tolles Snippet, danke. Hat jemand das für Mobilgeräte getestet? Funktioniert auf dem iPhone 5 großartig. Ich frage, weil dies eine ausgezeichnete Lösung für mobile Menüs wäre.
Sam
Danke dafür, Alter.
Es hat einige Probleme mit der Paginierung… es funktioniert nicht, wenn man zur nächsten Seite blättert.
Ich weiß, dass dieser Beitrag ziemlich alt ist, aber ich möchte Ihnen trotzdem noch einmal vielen Dank für diesen Beitrag sagen, die Kommentare sind ebenfalls eine Goldgrube.
Mit Promises
Danke Chris, das ist fantastisch leichtgewichtig und einfach zu implementieren!
Hier ist ein gutes Vollbild-Horizontal-Akkordeon, das ich gerade fertiggestellt habe -> http://codepen.io/dcdev/full/azvGwm/
Danke Chris! Ich liebe die Einfachheit. Ich habe dieses Beispiel angepasst, um einen No-JS-Fallback einzuschließen, der Elemente auch über CSS ausblendet, um einen Flash von ungestyltem Inhalt zu vermeiden, der durch das Ausblenden von Elementen über jQuery verursacht wird.
Siehe den Pen zxqExq von Peter Sorensen (@ptrsrsn) auf CodePen.
Ich möchte Pfeile im Akkordeon hinzufügen, wenn die Website geladen wird, zeigen alle Panels einen Pfeil nach rechts an und wenn ich auf ein Panel klicke, zeigt es den Pfeil nach unten an.
Wie mache ich das?
Ich habe ein besseres Skript.
$( document ).ready(function() { var allHeaders = $('.accordion dt'); var allPanels = $('.accordion dd'); allPanels.hide(); $('.accordion dt').click(function() { allHeaders.not($(this)).removeClass('open'); allPanels.slideUp(); if (!$(this).hasClass('open')) { $(this).next('dd').slideDown(); $(this).addClass('open'); } else { $(this).removeClass('open'); } return false; }); });Um mehrere Akkordeon-Instanzen ineinander zu verschachteln, ersetzen Sie den Aufruf von: allPanels.slideUp(); (im Originalcode) durch die folgende Zeile:
// allPanels.slideUp(); $(this).closest("dl").find("dd").slideUp();Schön und einfach, aber ich mag diese Funktionalität etwas besser.
(function($) {
var allPanels = $(‘.accordion > dd’).hide();
$(‘.accordion > dt > a’).click(function() {
allPanels.not($(this).parent().next()).slideUp();
$(this).parent().next().slideToggle();
return false;
});
})(jQuery);
Danke!!!
Ein Problem… wenn ich auf einen verankerten Link zum entsprechenden Tab im Akkordeon klicke… springt der Bildschirm in Chrome zum unteren Bildschirmrand… egal wo ich meine platziere.
Hallo, das ist wirklich der beste Code, den ich bisher gefunden habe. Ich suche derzeit nach einer Ergänzung, damit sich das Panel beim Klicken auf das nächste wieder nach oben verschiebt, anstatt am unteren Rand zu bleiben.
Wenn jemand eine Idee hat, wäre ich sehr, sehr dankbar!
Hallo!
Danke für diesen erstaunlichen Tutorial, es ist wirklich einfach. Ich musste nur wissen, ist es möglich, dieses Akkordeon dynamisch zu machen.
Ich habe diesen Code mit „Smooth Scrolling“ https://css-tricks.de/snippets/jquery/smooth-scrolling/ verwendet, um lange Panels zu optimieren. Danke!
Ich verwende das Plugin „Tabs – Responsive Tabs with Accordions“ und ich würde gerne alle Tabs NUR auf der mobilen Website (responsiv) schließen, da der erste Tab standardmäßig angezeigt wird. Ich verstehe weder CSS noch HTML-Code, kann mir also jemand helfen? Ich würde es sehr schätzen.
Vielen Dank im Voraus
Virginia
Was ist, wenn ich das geöffnete Akkordeon schließen möchte, indem ich darauf klicke?
$('.accordion-header').on('click', function() {console.log('clicked!')
allPanels.slideUp();
if(!$(this).next().is(':visible'))
{
$(this).next().slideDown();
}
return false;
});
Ich liebe dieses Akkordeon. Sehr leichtgewichtig und anpassbar. Wie kann ich es für Hyperlinks innerhalb der versteckten Abschnitte anpassen? Derzeit verschwinden alle Hyperlinks, was ich vermute, liegt an „$(‘.accordion > dt > a’).click(function() {“. Wie sollte ich dies ändern, um Hyperlinks in jedem Abschnitt zu ermöglichen?
Danke für diese super leichtgewichtige und einfache Lösung. Viele Leute installieren ein 3-MB-WordPress-Plugin auf einer Website, anstatt super einfache Dinge wie diese zu verwenden, nur um das gleiche Ergebnis zu erzielen. Auch eine gute Idee, dl/dt zu verwenden.
Danke Chris. Es hilft mir, mein Akkordeon-Problem zu beheben.