2009-02-17 41 views
12

Tôi nhầm lẫn khi tôi có thể sử dụng thuộc tính DOM và khi tôi có thể sử dụng các phương thức Jquery trên đối tượng Jquery. Này, tôi sử dụng một selectorPhương pháp JQuery và thuộc tính DOM

var $elemSel = $('#myDiv').find('[id *= \'select\']') 

Tại thời điểm này, $ elemSel là một đối tượng jquery mà tôi hiểu là một wrapper xung quanh mảng của các yếu tố DOM. Tôi có thể lấy tham chiếu đến các phần tử DOM bằng cách lặp qua đối tượng/mảng $ elemSel (Chính xác?)

Câu hỏi của tôi: 1. Có cách nào để chuyển $ elemSel này thành một mảng các phần tử DOM không thường xuyên không ? 2. Tôi có thể kết hợp các thuộc tính DOM và phương pháp JQuery cùng một lúc (một cái gì đó như thế này)

$elemSel.children('td').nodeName 

(nodeName là DOM liên quan, trẻ em được JQuery liên quan)

EDIT: Có gì sai với điều này?

$elemSel.get(0).is(':checked') 

EDIT 2:

Cảm ơn câu trả lời. Bây giờ tôi hiểu rằng tôi có thể sử dụng get (0) để lấy một phần tử DOM. Các câu hỏi khác:

  1. Làm cách nào để chuyển đổi phần tử DOM thành đối tượng JQuery?

  2. Nếu tôi gán "this" cho biến, có phải là var DOM hoặc JQuery mới không? Nếu đó là JQuery, làm cách nào tôi có thể chuyển đổi thành phần tử DOM? (Vì tôi không thể sử dụng get (0))

    var $ elemTd = $ (this);

  3. Khi tôi thực hiện một bài tập như phần trên, tôi đã thấy một số mẫu mã không bao gồm ký hiệu $ cho tên biến. Tại sao?

  4. Và đối với câu hỏi ban đầu của tôi, tôi có thể kết hợp các thuộc tính DOM và các hàm JQuery cùng một lúc trên đối tượng JQuery không?

    $ elemSel.children ('td'). NodeName

Trả lời

24

Bạn sẽ cần phải .get (0) kết quả để có được những đối tượng DOM-ready.

var myBox = $("div#myBox"); 
alert(myBox.get(0).id); // "myBox" 

Đọc "Peeling Away the jQuery Wrapper and Finding an Array" bởi Cody Lindley


Re: Chỉnh sửa:.is() không phải là một phương pháp javascript bản địa. Khi bạn chạy .get(0), bạn không còn làm việc ra khỏi đối tượng jQuery, do đó bạn không thể mong đợi để chạy các phương thức jQuery từ nó.

Nếu bạn muốn chạy .is() vào một kết quả cụ thể, sử dụng :eq(index) selector, hoặc .eq(index) method:

$("div:eq(1)").is(":checked"); // gets second div 
$("div").eq(1).is(":checked"); // gets second div 

Re: Chỉnh sửa # 2

Bob, bạn thực sự nên tạo các câu hỏi mới , thay vì hỏi thêm và nhiều câu hỏi khác tại đây.

Chuyển đổi một yếu tố dom đến đối tượng jquery được thực hiện bằng cách đi qua nó trong một selector:

var myBox = document.createElement("div"); 
var myBoxJQ = $(myBox); 

Cử This cho một biến. Phụ thuộc vào khi bạn làm điều đó. Nếu bằng "this" bạn đang đề cập đến một đối tượng jQuery, thì this sẽ là một đối tượng jQuery. Bạn có thể chuyển đổi nó bằng cách theo dõi this với .get(0).

Khi this đề cập đến đối tượng jQuery, bạn không cần phải bọc nó trong $(). Điều này là thừa.

Và cuối cùng, $elemSel.children('td').nodeName có thể được thực hiện như sau: $elemSel.children('td')[0].nodeName hoặc $elemSel.children('td').get(0).nodeName, trong đó 0 là chỉ mục của mục nào cần truy cập.

+0

Cảm ơn bạn đã giải thích. Vì vậy, nếu tôi muốn làm việc với các phần tử riêng lẻ của đối tượng Jquery và muốn chạy các phương thức Jquery trên chúng, tôi có phải sử dụng "từng" không? Còn cách nào khác không? –

+0

Đối tượng jQuery LÀ một mảng. Vì vậy, bạn có thể xử lý mọi cá thể của một đối tượng jQuery như một mảng. Truy cập mục đầu tiên trong mảng đó để chạy các phương thức javascript gốc của bạn trên đó. – Sampson

+0

Tôi có thể yêu cầu bạn xem xét câu hỏi jquery về một chủ đề khác ở đây không: http://stackoverflow.com/questions/13137404/jquery-find-div-class-name-at-a-certain-position-while -kiểm tra? –

1

Vì có thể có nhiều hơn một đối sánh trong bộ chọn jQuery, bạn cần lấy các phần tử ra khỏi "mảng".

Bạn có thể sử dụng phương thức get để trả về một phần tử DOM đơn lẻ hoặc một phần tử mảng hoặc DOM.

ví dụ:

var elims = $("div").get(); 
for(var i in elims) 
    alert(elims[i].nodeName); 

Edit:

$elemSel.get(0).is(':checked') sẽ không làm việc vì bạn đang nhận được đối tượng Dom và sau đó cố gắng sử dụng các chức năng jQuery trên đó. Nếu bạn muốn lấy một phần tử jQuery, hãy sử dụng eq.

$elemSel.eq(0).is(':checked'); 
0

Để gọi phương thức DOM bản địa, bạn có thể sử dụng được (index). Hoặc nếu bạn muốn sử dụng phương thức jQuery Object, bạn nên bọc một phần tử DOM gốc với jQuery, nó sẽ chuyển đổi phần tử DOM thành một đối tượng jQuery, vì vậy tất cả các phương thức sẽ có sẵn. http://www.linxinshan.com/?p=339

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