2013-02-15 30 views
8

Tôi đang cố gắng tạo ra một thứ gì đó như một accordion web.JQuery next() - Nhận anh chị em tiếp theo chỉ sử dụng các lớp

trực quan ví dụ:

[TITLE DIV 1] 
[CONTENT DIV 1] 
[TITLE DIV 2] 
[CONTENT DIV 2] 
[TITLE DIV 3] 
[CONTENT DIV 3] 

Tôi muốn để có thể chuyển đổi (chức năng jquery toggle()) một "Nội dung Div" bằng cách nhấp vào tương ứng "Tiêu đề Div".

Tôi đã thử những điều sau, nhưng nó không hoạt động.

http://jsfiddle.net/Cs3YY/

HTML:

<div class="topSeparator"></div> 
<div class="titleDiv"> 
    <h1>Title 1</h1> 
</div> 
<div class="bottomSeparator"></div>     
<div class="contentDiv"><h2>Content 1</h2></div> 

<div class="topSeparator"></div> 
<div class="titleDiv"> 
    <h1>Title 2</h1> 
</div> 
<div class="bottomSeparator"></div>     
<div class="contentDiv"><h2>Content 2</h2></div> 

jQuery:

$('.titleDiv').click(function() {  
     $(this).next('.contentDiv').toggle(); 
}); 

http://jsfiddle.net/Cs3YY/

tôi sẽ mô tả quá trình chức năng của tôi như vậy:

  1. Khi bạn bấm vào một phần tử với một lớp có tên là "titleDiv", làm:

1,1. Chọn yếu tố được nhấp;

1.1.1. Chọn anh chị em tiếp theo của phần tử đã nhấp đó với một lớp có tên là "contentDiv";

1.1.1.1. Làm cho hàm toggle() hoạt động trên phần tử cuối cùng này (Với lớp có tên là "contentDiv");

Có vẻ như tôi sai hoặc tôi đang thiếu thứ gì đó.

.

Tôi bao gồm jquery 1.8.3 (Chính xác).

Tính năng này hoạt động khi sử dụng ID thay vì các lớp học (Tôi đang cố tránh sử dụng chúng).

Tôi đã đặt cảnh báo bên trong hàm nhấp chuột và nó hoạt động (Vấn đề nằm trong đó).

Trả lời

25

Sử dụng .nextAll():first để có được những contentDiv tiếp theo

$(this).nextAll('.contentDiv:first').toggle(); 

Demo đây http://jsfiddle.net/Cs3YY/1/

+1

Cảm ơn Anton. Tôi vẫn không hiểu sự khác biệt giữa tiếp theo ('contentDiv') và nextAll ('. ContentDiv'), không nên cả hai nhận được để các yếu tố? (The nextAll sẽ nhận được tất cả) – Edu

+0

tiếp theo nhận được các phần tử trực tiếp sau đó trong trường hợp này là bottomSeparator.Sử dụng nextAll lấy tất cả các phần tử sau, nhưng sử dụng: đầu tiên lấy phần tử đầu tiên bằng công cụ chọn (". ContentDiv") – Anton

+0

Không nên tiếp theo ('. ContentDiv') chọn phần tử tiếp theo đầu tiên bằng đối số được cung cấp (Class contentDiv))? – Edu

-1

Mặc dù, đó là vì tiếp theo() chọn bottomSeparator. Bạn có thể sử dụng mà lừa

$('.titleDiv').click(function() {  

    $(this).next().next().toggle(); 
});  

http://jsfiddle.net/Cs3YY/12/

+0

Tôi nghĩ rằng điều này khó duy trì hơn so với các giải pháp khác, do 'ma thuật' double-nexting –

+0

Nếu vì lý do nào đó, tôi thay đổi cấu trúc HTML (loại bỏ div tách hoặc thêm thứ gì đó trước/sau dấu phân cách đó) . – Edu

+1

Vâng, đó chỉ là một mẹo và không phải là rất khó đọc, nhưng tôi nghĩ rằng nó sẽ cho thấy những gì đã sai. – luxcem

Các vấn đề liên quan