2009-10-12 13 views
5

Próba utworzenia zwijanych/rozwijanych elementów div za pomocą jQuery, ale w ogóle nie działa dla mnie ... Każdy h3 powinien rozwinąć/zwinąć div pod nim i nie jestem pewien, dlaczego to nie działa ... , to mocno zagnieżdżony div, ale pomyślałem, że poniższy skrypt znajdzie klasę uforms niezależnie od tego, ile innych znaczników znajduje się na stronie po załadowaniu, a następnie robi to, co powinno ...jquery - Zwijanie/rozwijanie elementów div?

Oto jQuery:

$(document).ready(function() { 
     $('div.uforms:eq(1)> div:gt(-1)').hide(); 
     $('div.uforms:eq(1)> h3').click(function() { 
       $(this).next('div:hidden').slideDown('fast').siblings('div:visible').slideUp('fast'); 
     }); 
}); 

I, znaczniki (minus wszystkie rzeczy, które faktycznie wewnątrz <div></div>, bo to dużo postać rzeczy ...)

<div class="uforms"> 
    <h3>Heading</h3> 
    <div></div> 

    <h3>Heading</h3> 
    <div></div> 

    <h3>Heading</h3> 
    <div></div> 
</div> 
+0

Co znajduje się punkt: GT (-1) i jakie są twoje intencje z: eq (1)? Dziwne, żeby to zobaczyć. – Ricky

Odpowiedz

2

myślę this co próbujesz achive

Gorąco polecam ramy jQueryUI.

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>jQuery UI Accordion - Default functionality</title> 
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> 
    <link rel="stylesheet" href="/resources/demos/style.css"> 
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
    <script> 
    $(function() { 
    $("#accordion").accordion(); 
    }); 
    </script> 
</head> 
<body> 

<div id="accordion"> 
    <h3>Section 1</h3> 
    <div> 
    <p> 
    Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer 
    ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit 
    amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut 
    odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate. 
    </p> 
    </div> 
    <h3>Section 2</h3> 
    <div> 
    <p> 
    Sed non urna. Donec et ante. Phasellus eu ligula. Vestibulum sit amet 
    purus. Vivamus hendrerit, dolor at aliquet laoreet, mauris turpis porttitor 
    velit, faucibus interdum tellus libero ac justo. Vivamus non quam. In 
    suscipit faucibus urna. 
    </p> 
    </div> 
    <h3>Section 3</h3> 
    <div> 
    <p> 
    Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis. 
    Phasellus pellentesque purus in massa. Aenean in pede. Phasellus ac libero 
    ac tellus pellentesque semper. Sed ac felis. Sed commodo, magna quis 
    lacinia ornare, quam ante aliquam nisi, eu iaculis leo purus venenatis dui. 
    </p> 
    <ul> 
     <li>List item one</li> 
     <li>List item two</li> 
     <li>List item three</li> 
    </ul> 
    </div> 
    <h3>Section 4</h3> 
    <div> 
    <p> 
    Cras dictum. Pellentesque habitant morbi tristique senectus et netus 
    et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in 
    faucibus orci luctus et ultrices posuere cubilia Curae; Aenean lacinia 
    mauris vel est. 
    </p> 
    <p> 
    Suspendisse eu nisl. Nullam ut libero. Integer dignissim consequat lectus. 
    Class aptent taciti sociosqu ad litora torquent per conubia nostra, per 
    inceptos himenaeos. 
    </p> 
    </div> 
</div> 


</body> 
</html> 
+5

Zgoda, nie ma sensu wymyślać koła, po prostu ponownie użyć cudzego;) – wiifm

+10

* Z wyjątkiem *, jeśli nie korzystasz już z jQueryUI, dodajesz minimum 32k (używając niestandardowej wersji) tylko dla akordeon. –

4

Jesteś selektorami są w błędzie. Nie trzeba eq lub gt

$(document).ready(function() { 
    $('.accordion > div').hide(); 
    $('.accordion> h3').click(function() { 
     $(this).next('div:hidden').slideDown('fast').siblings('div:visible').slideUp('fast'); 
    }); 
}); 

chciałbym zmienić klasę zidentyfikowany na coś bardziej ogólnego, dzięki czemu można ponownie użyć tego w innych miejscach.

<div class="accordion"> 
    <h3>Heading</h3> 
    <div>cactuspants! <div>I am an inner div</div></div> 

    <h3>Heading</h3> 
    <div>Hats</div> 

    <h3>Heading</h3> 
    <div>Hi!</div> 
</div> 

Również inni sugerują, że wystarczy użyć jQueryUI, który jest całkowicie prawidłowy, o ile nie jesteś już go używać lub zamierza wykorzystać go do dodatkowych funkcji. Funkcja linii s3 bije wraz z dodatkową biblioteką 32K (rozmiar minimalnie niezbędnych komponentów w dostosowanej kompilacji).

1

Po prostu używam widżetu z akordeonem z tylko jednym div wewnątrz.

$("#accordion").accordion({ 
    active: false, 
    collapsible: true 
}); 

<div id="accordion"> 
    <h3>Section 1</h3> 
    <div> 
    <p>test 1 2 3</p> 
    </div> 
</div> 

Dołącz link CSS:

link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" 
Powiązane problemy