2011-08-24 31 views
58

Tôi đang sử dụng jQuery v1.6.1 ở chế độ noConflict.Bộ chọn ID jQuery ("#id") Trả về mảng

Tôi đang sử dụng bộ chọn id như $j("#divID").value để nhận giá trị của các mục được lưu trữ.

Thật không may, $j("#inputID") đang trả về danh sách các mục, vì vậy tôi phải sử dụng $j("divID")[0].value để lấy giá trị của đối tượng. [0] có vẻ không cần thiết, vì có, theo định nghĩa, chỉ một phần tử html với bất kỳ id đã cho nào.

Đây có phải là cách thích hợp để nhận các giá trị từ một đối tượng được ID không? đây có phải là cách tốt hơn không?

Cảm ơn!

+0

Bạn có nghĩa là khác với '.val()'? – user113716

+1

Nếu '# divID' thực sự đề cập đến' div', thì 'giá trị' hoặc' .val() 'sẽ không hoạt động.Chỉ các phần tử biểu mẫu có thuộc tính 'value'. –

+0

Điểm tốt, @Felix. Tôi đã sửa chữa câu hỏi. – Richard

Trả lời

93

$j("#divID").val() sẽ hoạt động tốt.

Mỗi jQuery documentation, .val() sẽ trả về giá trị của phần tử đầu tiên trong tập hợp các phần tử được so khớp.

Hiểu biết khái quát về cách jQuery hoạt động để xem tại sao nó hoạt động theo cách này. Kết quả của bất kỳ truy vấn selector nào là một đối tượng jQuery. Đó là đối tượng jQuery chứa vô số các phương thức mà jQuery cung cấp. .val() là một trong những phương thức như là .fadeIn(), .hide(), v.v ... Những phương thức này không phải là phương thức trên đối tượng DOM, mà là các phương thức của đối tượng jQuery. Vì các đối tượng jQuery là mục đích chung và có thể chứa 0, 1 hoặc nhiều đối tượng DOM trong mảng nội bộ của chúng, bạn nhận được cùng một đối tượng jQuery từ một bộ chọn jQuery gọi liệu các kết quả có 0, 1 hoặc nhiều đối tượng DOM trong đó.

Do đó $j("#divID") chỉ chứa một đối tượng trả về cùng một loại đối tượng là $j(".rows") có thể chứa hàng trăm đối tượng DOM. Việc này đơn giản hóa việc lập trình jQuery bởi vì bạn không phải làm những việc khác nhau tùy thuộc vào việc có bao nhiêu đối tượng trở lại từ truy vấn chọn.

Khi bạn tham khảo $j("divID")[0], bạn đang tiếp cận mảng nội dung đối tượng DOM của đối tượng jQuery (đã được điền vào truy vấn chọn) và tìm nạp đối tượng DOM đầu tiên trong mảng đó. Tại thời điểm đó, bạn có một đối tượng DOM bình thường, không phải là một đối tượng jQuery và bạn có thể sử dụng các phương thức hoặc các thuộc tính DOM thông thường trên nó. Đôi khi điều này là bắt buộc (để tìm nạp đối tượng DOM thực tế), nhưng thông thường, nó dễ dàng hơn khi sử dụng các phương thức mà jQuery cung cấp trên đối tượng jQuery. Có rất nhiều lợi thế khi sử dụng chúng như bạn có thể chuỗi nhiều yêu cầu đến hầu hết các phương thức và nó sẽ lặp qua tất cả các đối tượng DOM trong mảng nội bộ của nó cho bạn một cách tự động. Ví dụ, bạn gọi là: $j("rows-even").hide() và có 20 hàng với lớp đó, sau đó tất cả chúng sẽ được vận hành bởi phương thức hide() mà không có mã nào nhiều hơn thế này. Bạn có thể kết nối nhiều phương thức với nhau như sau: $j("rows-even").slideUp().slideDown(). Trong trường hợp này, bạn đang chạy một hình ảnh động và jQuery sẽ kết hợp hai hoạt ảnh này lại với nhau, tự động bắt đầu hình ảnh động thứ hai khi lần đầu tiên kết thúc. Đó là tất cả khá hữu ích trong nhiều trường hợp và có thể tiết kiệm một tấn mã trên những gì thường sẽ phải được viết bằng cách sử dụng JS đồng bằng.

+0

Câu trả lời hay, cảm ơn! – Richard

+0

+1 câu trả lời hay, hoàn chỉnh. –

+0

+1 câu trả lời hay. – Usman

3

$j("#divID") trả về đối tượng jQuery. Để có được giá trị của phần tử đã chọn, bạn phải gọi phương thức val để nhận giá trị.

Sử dụng $j("#divID").val();

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