2013-04-02 26 views
11

Tôi có một chương trình mà gán một biến như:selectors Jquery không làm việc cho gán yếu tố dom để biến

var theList = document.getElementById('theList'); 

nó sử dụng jquery, nhưng nếu tôi viết nó như thế này:

var theList = $('#theList'); 

chức năng sử dụng biến đó không hoạt động.

Sự khác biệt giữa bộ chọn jquery và sử dụng getElementById là gì?

+1

Bạn muốn sử dụng 'theList = $ ('# theList') [0]' hoặc 'theList = $ ('# theList'). Get (0)'. – zzzzBov

Trả lời

1

Đầu tiên theList là phần tử DOM; số thứ hai theList (lý tưởng nhất là viết là $theList) là jQuery object. Chức năng của bạn dường như mong đợi cái cũ và không phải là cái sau.

17

document.getElementById trả về đối tượng DOM Element gốc, có quyền truy cập trực tiếp vào các thuộc tính của nút đó.

Chức năng jQuery thay vì trả về "bộ sưu tập jQuery", tức là đối tượng jQuery có tập hợp các chức năng/plugin, vv hoạt động giống như một mảng các nút DOM.

Một quy ước chung sử dụng để báo cho cựu từ sau này là tiền tố biến chứa sau này với $:

Để trích xuất các yếu tố cá nhân từ một bộ sưu tập jQuery như các nút DOM, hoặc sử dụng .get(n) hoặc [n].

var $theList = $('#theList'); // jQuery collection 
var theList = $theList[0];  // DOM node 
var theList = $theList.get(0); // also a DOM node 

Thuộc tính và tài sản truy cập phụ thuộc vào việc bạn có một bộ sưu tập jQuery hay không:

var id = $theList.attr('id'); // jQuery function 
var id = theList.id;   // native property 
+0

Sau khi tìm kiếm "đối tượng DOM và đối tượng jQuery", tôi đã xem qua http://stackoverflow.com/questions/6974582/jquery-object-and-dom-element này và xác định rằng tương đương jquery của var theList = document.getElementById (' danh sách'); sẽ là var theList = $ ('# theList').nhận được (0); – user1469779

+0

@ user1469779 có, điều đó nói nhiều như nhau. – Alnitak

+0

Chính xác mã tôi đã đưa ra trong câu hỏi của mình để thực hiện chuyển đổi. Rất vui được thấy bạn đã thực hiện chỉnh sửa để bao gồm quy trình chuyển đổi. – TheManWithNoName

0

Đó là bởi vì $ ('# theList') trả về một đối tượng JQuery, không phải là một đối tượng DOM. Đối tượng JQuery không có cùng phương thức & thuộc tính dưới dạng Phần tử Javascript/Nút có thể.

-1

Hàm getElementByID tiêu chuẩn trả về tham chiếu JavaScript cho phần tử DOM, trong khi hàm jQuery trả về đối tượng jQuery (có chứa một tham chiếu dạng mảng giống như không hoặc nhiều tham chiếu JavaScript đến các phần tử DOM).

Để cho phù hợp, bạn có thể sử dụng:

var theList = $('#theList').get(0); 

NB: Edited để giúp giữ cho hòa bình thế giới và chính xác của tôi vội vàng gõ thuật ngữ mà bình luận đã nhanh chóng chỉ ra.

+0

không, nó thực sự không phải là "một mảng các đối tượng jQuery". Đó là một đối tượng jQuery đơn với một tập hợp các thuộc tính được lập chỉ mục bằng số biểu thị các phần tử DOM riêng lẻ bên trong bộ sưu tập đó. – Alnitak

+0

Nó không phải là một "đối tượng JavaScript", nó là một phần tử DOM. jQuery không tạo ra một mảng, mặc dù nó là [mảng giống như] (http://stackoverflow.com/a/11886626/497418). – zzzzBov

+0

Phụ thuộc vào cách bạn nhìn vào nó .. một đối tượng jQuery chứa một cấu trúc danh sách của các đối tượng riêng lẻ hoặc đề cập đến một đối tượng jQuery duy nhất nếu chỉ có một mục được trả về bởi bộ chọn. Nếu bạn làm jQuery ('. Mọi thứ') bạn sẽ không nhận được một đối tượng mà là một danh sách các đối tượng. – TheManWithNoName

0

getElementById hàm trả về phần tử đầu tiên với id đã cho, nơi bộ chọn jquery trả về đối tượng được gọi là "bộ bọc". Bạn có thể sử dụng hàm each để lặp qua nó và gọi hàm của bạn.

Xem bài viết này: http://www.devx.com/codemag/Article/40923.

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