2012-11-23 16 views
5

jQuery kullanarak bir giriş nesnesi dizisi seçiyorum ve dizi öğelerinden birini seçtikten sonra birden çok yöntemi zincirlemeye çalıştığımda ilginç bir soruna giriyorum. Birisi bana bu davranışı neden aldığımı açıklayabilir mi? Ben .val() çağrı sonra jQuery .first() veya .last() ve kullanma unsurlarından biri seçersenizNeden jQuery'yi kullanarak array.first'ten farklı bir nesne döndüren dizi [0] ve neden .val() kullanamıyorum?

jQuery('.custom-size').first().find('input:hidden') 
returns => 

[<input id=​"custom_order_custom_sizes_attributes_0_size_id" name=​"custom_order[custom_sizes_attributes]​[0]​[size_id]​" type=​"hidden" value=​"138">​ 
, 
<input name=​"custom_order[custom_sizes_attributes]​[0]​[_destroy]​" type=​"hidden" value=​"0">​ 
] 

, ben "138" beklenen değeri olsun.

var input = jQuery('.custom-size').first().find('input:hidden')[1] 
returns => 
<input name=​"custom_order[custom_sizes_attributes]​[0]​[_destroy]​" type=​"hidden" value=​"0"> 

Ancak bu nesne üzerinde .val() arayamam: Ben dizide bir konum kullanmaya çalıştığınızda

, ben dizinin elemanını döndürebilir. Bunun yerine bu hata mesajını alıyorum:

TypeError: Object #<HTMLInputElement> has no method 'val' 

bekar elemanı döndürmek için .slice(x,y) kullanabilirsiniz, ancak bu oldukça saçma geliyor. Burada neyi özlüyorum.

+0

bir jsfiddle birlikte koymak Sorunu gösterir, bu şekilde oynayabiliriz ve belki yardımcı olabiliriz. – michaelward82

cevap

5

Aşağıdaki kod:

$(".something")[0] 

jQuery setinden tek DOM öğesi alır. Bu kod, bir jQuery nesne değil beri, val() yöntemi yoktur

document.getElementsByClassName("something")[0] 

alındı ​​DOM öğesini yaparsanız aynı yapar.

jQuery kümesinden birinci jQuery nesnesi elde etmek için, :eq() seçici (veya .eq() yöntemi) ya da :first seçici (veya .first() yöntemi) ya da kullanabilir:

$(".something:eq(0)"); // $(".something").eq(0); 
$(".something:first"); // $(".something").first(); 
+0

neden .slice (x, y) burada çalışıyor? Bir jQuery nesnesi döndürdüğünü farz ediyorum ... ama neden olmadığından emin değil miyim? – Paul

+1

@Paul jQuery harika ['slice()'] (http://api.jquery.com/slice/) yöntemine sahiptir. – VisioN

+0

Oh, bunun bir jQuery yöntemi olduğunu bilmiyordum. Rubified JS :) – Paul

5

Bir jQuery nesnesini parantez gösterimi ve dizini ile girerseniz, bu dizindeki raw DOM öğesini döndürür. DOM öğelerinin herhangi bir jQuery yöntemi yoktur.

.first, .last veya .eq diğer yandan jQuery nesnesini döndürür. Belirli bir dizinde n bir jQuery nesnesi almak için $(...).eq(n) kullanın.

2

Dizine göre yerel konum ([1]) belirtilen DOM öğesini döndürür.
jQuery .first() gibi işlevler, jQuery nesnesini (jQuery kaplamasına sarılmış oldukça fazla DOM öğesi) diğer işlevlere sahip olarak döndürür.

İlgili konular