2012-12-08 13 views
8

Tôi mới sử dụng jQuery và tôi đang gặp một chút rắc rối khi hiểu ký pháp mảng của nó cho các đối tượng. Đọc các tài liệu jQuery và this article, có vẻ như bạn có thể tham khảo các sản phẩm thứ n trong một đối tượng được trả về bởi một selector bằng cách làm một cái gì đó giống nhưKý hiệu mảng đối tượng jQuery

$('.foo')[n]; 

có đúng không? Tôi có thể sử dụng các chức năng thao tác/hiệu ứng jQuery song song không? Giống như (điều này không làm việc cho tôi)

$('.foo')[0].hide(); 

Tôi cũng đã cố gắng, không có kết quả:

var arr = $('.foo').get(); 
arr[0].hide(); 

Có điều gì sai trong cú pháp của tôi không? Cách tốt nhất để làm những gì tôi đang cố gắng làm ở đây là gì?

Cảm ơn!

Trả lời

17

Ký hiệu mảng [0].get() method cả hai đều trả về tham chiếu đến phần tử DOM trong đối tượng jQuery và bạn không thể sử dụng các phương thức jQuery trên các phần tử DOM.

Thử eq() method thay vào đó, bởi vì nó sẽ trả về một đối tượng jQuery mới:

$('.foo').eq(0).hide(); 

Cũng lưu ý rằng khi sử dụng các ký hiệu mảng hoặc .get() để có được một tham chiếu đến một phần tử DOM có nghĩa là bạn thể sau đó nhận được trực tiếp truy cập vào các thuộc tính của phần tử DOM, ví dụ:

var firstElId = $('.foo')[0].id; 

... với một lưu ý thứ hai mà $('.foo')[0] sẽ undefined$('.foo')[0].id sẽ đưa ra lỗi nếu không có yếu tố nào khớp với bộ chọn '.foo'.

+0

Cảm ơn! Đó chính là điều tôi cần biết. –

6

Khi bạn tham chiếu đối tượng jQuery dưới dạng mảng, bạn sẽ lấy lại phần tử DOM. Bạn sẽ cần phải chuyển đổi nó trở lại một đối tượng jQuery để sử dụng các phương pháp như .hide()

var bar = $('.foo')[n]; 
var $bar = $(bar); 

$bar.hide(); 

Hoặc chỉ cần sử dụng eq jQuery() phương pháp:

var bar = $('.foo').eq(n); 
bar.hide(); 
+0

Ví dụ đầu tiên hoạt động, nhưng đó là một cách khá nặng để làm điều đó. Tốt hơn là chỉ sử dụng '.eq()' như trong ví dụ thứ hai. – saluce