2009-01-14 16 views
21

Tôi muốn tìm các phần tử span đầu tiên sau giờ học truy cập, trong mã một cái gì đó như thế này:Tìm yếu tố tiếp theo không phải là ngay lập tức?

<div class="counter"></div> 
<p></p> 
<span></span> 

Dường như() chức năng tiếp theo chỉ thấy phần tử tiếp theo ngay lập tức, vì vậy một cái gì đó như thế này:

$(".counter").next("span") 

Sẽ không hoạt động. Con đường tôi đã được sử dụng là một chút dài và tôi đã tự hỏi nếu có một cách ngắn hơn, nó là thế này:

$(".counter").nextAll("span").eq(0) 

Tôi nghĩ rằng closest() phương pháp trong jQuery 3 sẽ làm các trick, nhưng tôi đang sử dụng 1.2 .6 - có cách nào tốt hơn để làm điều này (tôi chỉ sử dụng next() sai?)

+0

đây là cách tôi đã thực hiện: http://stackoverflow.com/a/30089307/274502 – cregox

Trả lời

8

Tôi nghĩ phương pháp của bạn là cách tốt nhất. Và nếu bạn cảm thấy nó không nhìn tốt chỉ biến nó thành một plugin:

jQuery.fn.firstAfter = function(filter){ 
return this.nextAll(filter).eq(0); 
} 
1

Tôi không chắc rằng phương pháp gần nhất sẽ thực hiện thủ thuật, nhưng nếu có ... có thể bạn có thể trích xuất phương pháp gần nhất từ ​​1.3 và biến nó thành một plugin?

Tôi chưa có cơ hội để thử điều này, nhưng hãy thử xem. Nó không thể bị tổn thương:

(function($) { 
    $.fn.closest = function (selector) { 
    return this.map(function(){ 
     var cur = this; 
     while (cur && cur.ownerDocument) { 
     if ($(cur).is(selector)) 
      return cur; 
     cur = cur.parentNode; 
     } 
    }); 
    } 
})(jQuery); 
+0

CLOSest cũng sẽ tìm kiếm ở trên. –

3

Tôi nghĩ rằng chức năng siblings() là những gì bạn đang tìm kiếm. Hãy thử một cái gì đó như thế này:

$(".counter").siblings("span"); 
+0

Bất kỳ lý do nào cho downvote? Đây là giải pháp đơn giản nhất cho vấn đề. –

+0

Tôi đã không downvote, nhưng điều này không chỉ tìm thấy bạn các yếu tố đó là anh chị em ngay lập tức để một .counter một. Tôi nghĩ anh ấy muốn tiếp theo trên trang như thể chúng tôi đang xem mã nguồn. –

+0

Hmm, có thể. anh chị em() làm việc cho mã ví dụ anh ấy đăng. –

0

thử một cái gì đó như thế này:

$(".counter ~ span:first"); 

Hy vọng rằng sẽ giúp!

+0

Điều này sẽ không hoạt động khi bạn có một nơi nào đó như:

. Khoảng thời gian sẽ không khớp. –

0

$ ("counter + span.")

17

Tương tự như câu trả lời rõ rệt nhưng trông hơi sạch hơn bằng cách sử dụng: công cụ chọn đầu tiên:

$('.counter').nextAll('span:first') 
Các vấn đề liên quan