2012-05-22 30 views
11

Hãy nói rằng tôi có HTML này:jQuery selector cho việc tìm kiếm các yếu tố đầu tiên sau khi một yếu tố cho phù hợp với một selector

<textarea>blah</textarea> 
<br> 
<div class="select_this">hello!</div> 

Làm thế nào tôi có thể chọn DIV với lớp "select_this" khi tôi đã có các textarea xác định ? Tôi không muốn sử dụng bộ chọn lớp trên toàn bộ tài liệu vì tôi đang làm việc với tài liệu lớn và tra cứu lớp học chậm trong các trình duyệt cũ hơn.

jQuery .next() dường như không thực hiện thủ thuật, gần nhất() chỉ tìm kiếm cây DOM và .nextUntil() đủ điều kiện trên mọi thứ tôi cần trừ div "select_this". Có bất kỳ tùy chọn nào khác không?

+0

[Câu trả lời khá có liên quan về một câu hỏi tương tự] (http://stackoverflow.com/a/29084305/274502) – cregox

Trả lời

19

Có hai cách để làm điều đó.

Sử dụng này nếu bạn chỉ có một vài anh chị em:

$('textarea').nextAll('div.select_this').first(); 

Nhược điểm của việc này là nó kiểm tra tất cả các yếu tố sau để xem nếu nó phù hợp với chọn, ngay cả sau khi nó được tìm thấy đầu tiên. Sử dụng điều này nếu bạn có nhiều, rất nhiều anh chị em, để tiết kiệm đánh giá:

$('textarea').nextUntil('div.select_this').andSelf().last().next(); 

Cũng lưu ý rằng nó tốt hơn để sử dụng các phương pháp firstlast, chứ không phải là bộ chọn tương ứng của họ (:first, :last), bởi vì trình duyệt không tự nhiên hiểu các bộ chọn, làm chậm biểu thức xuống một cách đáng kể.

Đã chỉnh sửa để kết hợp andSelf cho mỗi nhận xét bên dưới.

+0

Câu trả lời hay! Đã bỏ phiếu! – Vishal

+1

Ví dụ thứ hai không hoạt động nếu hai phần tử nằm ngay cạnh nhau vì hàm nextUntil() trả về một tập hợp các kết quả rỗng. – tnunamak

+0

Câu trả lời nên thực sự bao gồm những gì @tnunamak nói. – Zitrax

3

Bạn muốn nextAll:

jQuery(yourTextarea).nextAll('.select_this:first'); 
+0

Câu hỏi tò mò: bằng cách sử dụng ": đầu tiên" jQuery dừng tìm kiếm của nó khi nó đủ điều kiện trong lần đầu tiên hoặc tìm kiếm thông qua toàn bộ DOM và sau đó chỉ trả về phần tử đầu tiên được tìm thấy? –

+0

@ElliotB. Cái sau. – lonesomeday

+0

@lonesomeday - dang, điều đó không tốt, có cách nào để thực hiện điều này không? –

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