2011-12-16 31 views

Trả lời

52

Giả sử bạn có một tham chiếu đến div đã:

$(yourDiv).find("p").eq(0); 

Nếu p đầu tiên sẽ luôn là một đứa trẻ trực tiếp của div, bạn có thể sử dụng children thay vì find.

Một số lựa chọn thay thế bao gồm:

$(yourDiv).find("p:eq(0)"); //Slower than the `.eq` method 
$(yourDiv).find("p:first"); 
$(yourDiv).find("p").first() //Just an alias for `.eq(0)` 

Lưu ý rằng phương pháp eq sẽ luôn là cách nhanh nhất để làm điều này. Dưới đây là kết quả của một quick comparison của eq phương pháp, :eq selector và :first selector (Tôi không bận tâm với phương pháp first kể từ khi nó chỉ là một bí danh của eq(0)):

enter image description here

+0

Nice, điều này có vẻ thuyết phục, Cảm ơn bạn! –

+1

Không có vấn đề, vui mừng tôi có thể giúp :) Nếu bạn quan tâm, nhưng một lựa chọn khác sẽ là ': lt (1)'. Tôi gần như chắc chắn nó sẽ chậm hơn so với phương thức '.eq', nhưng đó cũng là một cách khác để đạt được điều tương tự. –

+0

Chà, đó là một sự khác biệt đáng kể. Tôi không hiểu tại sao jQuery lại cho phép: đầu tiên.Trong nền, nó sẽ được chuyển đổi thành: nth-child (1). http://jsperf.com/jq-first-vs-eq/3 Có lý do nào không được thực hiện? – rkw

6
$('div p:first') 

câu trả lời đã quá viết tắt mà không có câu vô dụng này.

Chỉnh sửa Đây chắc chắn là tùy chọn chậm. Sau khi nhìn vào kiểm tra tốc độ của Jame, có vẻ như bộ chọn jQuery hoạt động tốt nhất khi chúng quay trở lại với bộ chọn css.

+0

@JamesAllardice Tương đương với .irst(), bởi vì cả hai đều khớp với một phần tử duy nhất. Cho dù đó là hiệu ứng mong muốn phụ thuộc vào thách thức của Web_Designer. – Colin

+0

@ Farrell - Vâng, nó bằng '.first' và': first' và ': eq (0)' và ': lt (1)' (có rất nhiều cách viết cùng một thứ với jQuery), nhưng nó nên được nhịn ăn của bó. –

+0

@rkw - Lưu ý rằng ': nth-child' không tương đương và sẽ không hoạt động trong trường hợp này. Bạn có quyền nghĩ rằng các bộ chọn làm việc tốt nhất khi chúng có một CSS tương đương, đặc biệt là trong các trình duyệt hiện đại, bởi vì các phương thức 'querySelector' và' querySelectorAll' có thể được sử dụng thay vì Sizzle. –

0
$('div p').first() 

Nên hoạt động. Tôi nghĩ.

2

$ ("div p"). First();

hoặc $ ('div p: first');

tham khảo: http://api.jquery.com/first/

Hãy ghi nhớ rằng đầu tiên() chỉ khớp với một yếu tố duy nhất,: selector first-child có thể phù hợp với nhiều hơn một: một cho mỗi phụ huynh.

1

Bạn hầu như biết câu trả lời (từ tiêu đề bài đăng của mình). Có một bộ chọn trong jQuery được gọi là :first-of-type. Sử dụng nó để tìm và thêm class cho thẻ p đầu tiên tự động, như vậy:

$("div p:first-of-type").addClass('someClass'); 
+0

: loại đầu tiên và loại cuối cùng có sẵn từ jQuery 1.9 – Bell

-1

này nên làm việc

$("div p:first-of-type").css("font-size: 10px"); 

Đoạn mã trên tìm thấy đoạn đầu tiên trong div như @Denver chỉ và thay đổi nó fonts-size-10px

Dưới đây là một ví dụ giải thích thậm chí thêm về jQuery first-of-type selector

+0

Không, không được. Câu trả lời này, về cơ bản, giống hệt với câu trả lời của Devner hai năm rưỡi trước đây (http://stackoverflow.com/a/16381687/19068) ngoại trừ bạn đã thay đổi nó để chọn phần tử sai. – Quentin

+0

Đồng ý! và chỉnh sửa mã. Cảm ơn – Packer

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