2011-10-21 41 views
8
jQuery(); //[] 
jQuery("#footer"); //[<div id="footer">...</div>] 

Tôi biết rằng bạn có thể làm một cái gì đó như thế này:Làm thế nào để jQuery làm cho giá trị trả về trông giống như một mảng?

function kablam(tag) { 
    var els = document.getElementsByTagName(tag); 
    els.isKablam = true; 
    return els; 
} 
var body = kablam("body"); //[<body class="ask-page">...</body>] 
body.isKablam; //true 

Để trở về một "đại gia" phiên bản của NodeList đó là trở về từ document.getElementsByTagName.

Tuy nhiên, jQuery thực hiện ngược lại. Nó kết hợp các kết quả vào chính nó (như có thể được nhìn thấy herehere). Hơn nữa, điều đó không giải thích làm thế nào nó trả về một mảng giống như đối tượng-trông giống như một mảng khi bạn không truyền bất cứ thứ gì cho nó:

jQuery(); //[] 

Khi bạn làm điều đó, jQuery đơn giản trả về chính nó. (source)

Hoặc để cùng gia hạn, khi bạn chọn thẻ nội dung:

jQuery("body"); //[<body class="ask-page">...</body>] 

(source)

Hoặc, đến để suy nghĩ về nó, bất cứ điều gì ở tất cả:

var o = {}, body = document.getElementsByTagName("body"); 
jQuery.merge(o, body); //Object, not [...] 

Trả về các đối tượng giống như mảng là siêu dễ dàng, vì việc gán các phím số là tầm thường và không khác với gán bất kỳ khóa nào khác. Nhưng làm thế nào để jQuery làm cho nó "trông giống như" một mảng?

Trả lời

7

Bạn cần xác định .length, .splice.push trên mẫu thử nghiệm để hiển thị như một mảng.

Một số kết hợp khác của phương thức mảng cũng có thể hoạt động.

Example

+1

Tôi khá chắc chắn '.push' là không cần thiết :) –

+1

Ngoài ra, nó không cần phải được trên nguyên mẫu. Hãy thử điều này trong giao diện điều khiển: 'a = {length: 0, splice: function() {}}' – Shmiddty

0

"Trông giống như một mảng" theo ý kiến ​​của bạn là gì? Làm thế nào bạn sẽ kiểm tra mảng? Nếu bạn xem xét mọi thứ có độ dài là một mảng thì tất cả những gì bạn cần để tạo một đối tượng trông giống như mảng là định nghĩa thuộc tính length. jQuery làm điều đó.

+0

Đó là lý do tại sao tôi phân tách mảng giống như mảng và giống nhau. Mảng giống như được coi là có một chỉ số dài và số (cả hai đều là tầm thường để làm). Câu trả lời ngắn nhất cho mảng giống như là khi bạn đăng nhập nó, bạn nghĩ rằng bạn đang nhìn vào một mảng. – Zirak

+0

@bjornd trong trường hợp này "trông giống như một mảng" có nghĩa là trình gỡ lỗi/console/dev-tools trong trình duyệt in nó như một mảng – Raynos

+0

@Zirak, @Raynos Vì vậy, nó chỉ phụ thuộc vào cách trình gỡ rối/console/dev-công cụ xử lý các loại các đối tượng. Ví dụ, họ có thể kiểm tra 'đối tượng instanceof Array' hoặc kiểm tra độ dài hoặc thuộc tính mảng cụ thể khác. – bjornd

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