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

Ben böyle bir şey yapabileceğini biliyoruz:jQuery döndürülen değeri bir dizi gibi gösterir mi?

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 

document.getElementsByTagName yeni döndü NodeList bir "genişletilmiş" versiyonunu geri dönmek için. Ancak, jQuery bunun tersini yapar. Sonucu kendi içinde birleştirir (here ve here olarak görülebilir). Ayrıca, bu ona hiçbir şey geçerken bir dizi benzeri-nesne-o-görünüyor benzeri-bir-dizi döndürür nasıl açıklamıyor:

jQuery(); //[] 

jQuery basitçe kendisini döndüren, bunu yaparken. (source)

Ya da aynı etmek Gövde etiketini seçtiğinizde, uzatmak

: hiç düşünmek gelmek

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

(source)

Veya, şey:

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

Sayısal tuşların atanması önemsiz ve başka bir anahtar atamaktan farklı olmadığı için dizi benzeri nesnelerin döndürülmesi çok kolaydır. Ama jQuery bir diziyi "nasıl" gösterir?

cevap

7

Bir dizi gibi görüntülenmesi için bir prototip üzerinde .length, .splice ve .push tanımlamanız gerekir.

Bazı diğer dizi yöntemleri de işe yarayabilir. Ben dizi benzeri ve dizi benzediğiniz ayrılmış neden

Example

+1

Oldukça eminim .push 'gerekli değil :) –

+1

Ayrıca, prototip üzerinde olması gerekmez. Bunu konsolda deneyin: 'a = {length: 0, ekleme: function() {}}' – Shmiddty

0

Sizce "diziye benzeyen" nedir? Arsızlığı nasıl kontrol edersiniz? Uzunluğa sahip olan her şeyi bir dizi olarak düşünürseniz, bir nesneyi diziye eklemeniz gereken tek şey uzunluk özelliğini tanımlamaktır. jQuery bunu yapar.

+0

budur. Dizi benzeri bir uzunluk ve sayısal dizinler (her ikisi de yapmak için önemsiz olan) olarak kabul edilir. Dizi-görünüşü için en kısa cevap, giriş yaptığınızda bir diziye baktığınızı düşünmenizdir. – Zirak

+0

@bjornd bu durumda "bir dizi gibi görünüyor", tarayıcılarda hata ayıklayıcı/konsol/dev-araçları – Raynos

+0

@Zirak, @Raynos olarak yazdıracağı anlamına gelir. Bu yüzden sadece hata ayıklayıcı/konsol/dev-araçlarının nasıl kullanıldığına bağlıdır. nesneler. Örneğin, 'Nesne instanceof Array 'nesnesini kontrol edebilir veya uzunluk veya başka diziye özgü bir özelliği kontrol edebilirler. – bjornd

İlgili konular