2012-04-20 28 views
8

Tôi đang cố gắng để có được lúc đầu tiên không (. Ẩn) div sau div .focus. Trong ví dụ này, tiêu điểm là X2 và tôi sẽ lấy lại X5, bỏ qua X3 và X4 vì chúng bị ẩn.Trong jQuery, cố gắng để có được mục tiếp theo-không-có-một-cụ thể-class

<div id='CONTAINER'> 
    <div id='X1'>eks1</div> 
    <div id='X2' class='focus'>eks2</div> 
    <div id='X3' class='hidden'>eks3</div> 
    <div id='X4' class='hidden'>eks4</div> 
    <div id='X5'>eks5</div> 
    <div id='X6'>eks6</div> 
</div> 

Điều này có vẻ như đây là một câu hỏi khá đơn giản, nhưng tôi khá mới đối với nội dung này. ..

Trả lời

17

Những tuyên bố dưới đây sẽ giải quyết vấn đề của bạn. $("#CONTAINER").find("div.focus").nextAll("div").not(".hidden").first();

+0

Ok, tôi đã hoàn thành kiểm tra và câu trả lời này được xác nhận để tìm nút không ẩn đầu tiên bao gồm khi không có nút không bị ẩn. Cảm ơn một lần nữa và xin lỗi vì đã chấp nhận câu trả lời không chính xác sớm. – user939737

+0

PS - cuối cùng, chúng tôi đánh dấu các dòng 'not .hidden' với thuộc tính 'notHidden' để chúng có thể được xác định mà không sử dụng toán tử 'not', điều này khá chậm so với các tập hợp lớn hơn. – user939737

2

Sử dụng phương pháp nextAll: http://api.jquery.com/next/

$ ('div.focus') nextAll ('div: không (.hidden)') lọc (': thứ nhất');

này sẽ tìm ra div tiếp theo sau khi .focus không được .hidden

+0

này sẽ tìm ra anh chị em tiếp theo _if_ nó phù hợp với chọn, không phải là tiếp theo trên _that_ maches chọn. – tobyodavies

+1

Whats sự khác biệt giữa "nếu" và "đó" là gì? Ngoài ra, "đó" không phải là một hoạt động hợp lý trong jQuery. Hoạt động "đó" là gì? TobyODavies, mã của bạn sẽ không tìm thấy mã tiếp theo, nhưng thay vào đó sẽ ngừng tìm kiếm các div khi tìm thấy div .hidden, sẽ không trả về kết quả nào trong ví dụ của OP. –

+0

lưu ý rằng khi tôi nhận xét nó nói 'tiếp theo' không phải 'nextAll', (và đây vẫn là những gì được liên kết). cũng lưu ý các cuộc gọi '.last(). next()' trong câu trả lời của tôi (vẫn không chính xác trong trường hợp không ẩn) sẽ tiếp tục qua div chưa được ẩn cuối cùng. Bạn là đúng, "đó" không phải là một hoạt động logic trong jQuery, thuận tiện tôi viết bằng tiếng Anh, trong đó nó là một từ hoàn toàn hợp lệ được sử dụng để nhấn mạnh rằng() sẽ không tiếp tục tìm kiếm quá khứ một anh chị em bất kể selector được đưa ra. – tobyodavies

0
$nextNotHidden = $('.focus').nextUntil(':not(.hidden)').last().next() 
1

dùng thử!

$("#CONTAINER").find("div.focus").next('div[class!="hidden"]') 
+0

Wow, cảm ơn mọi người đã trả lời. Tôi đã chọn cái này vì nó là cái đầu tiên cũng xử lý trường hợp không có div ẩn nào. – user939737

+0

Bạn đã kiểm tra xem nó có hoạt động không? – Adil

+0

Tôi nghĩ đó là, nhưng bây giờ tôi đang gặp rắc rối. Vẫn đang kiểm tra xem thử nghiệm của tôi có bị ô nhiễm không. Tôi nghĩ nó sẽ không hoạt động vì 'next' chỉ kiểm tra một nút, nó không quét trước cho đến khi tìm thấy một nút. – user939737

0

Hãy thử điều này:

var stop = true; 
$('#CONTAINER> div.focus +div').each(function(){ 
    if(!$(this).hasClass('hidden') && stop) code 
    else stop = false; 
}); 
Các vấn đề liên quan