5

jQueryを使用して入力オブジェクトの配列を選択していますが、配列要素の1つを選択した後、複数のメソッドをチェーンしようとすると、興味深い問題が発生します。なぜ私がこの振る舞いをするのか誰かが私に説明できますか?

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">​
]

.first()jQueryまたはを使用して要素の1つを選択して.last()からを呼び出すと.val()、期待値のが得られます"138"

配列内の場所を使用しようとすると、配列の要素を返すことができます。

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

.val()ただし、このオブジェクトを呼び出すことはできません。代わりに、次のエラーメッセージが表示されます。

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

単一の要素を返すために使用できます.slice(x,y)が、これはかなりばかげているようです。ここで何が欠けていますか。

4

3 に答える 3

5

角かっこ表記とインデックスを使用してjQueryオブジェクトにアクセスすると、そのインデックスにある生のDOM要素が返されます。DOM要素にはjQueryメソッドはありません。

.first.lastまたは.eq一方、jQueryオブジェクトを返します。特定のインデックスでjQueryオブジェクトを取得するにはn、を使用します$(...).eq(n)

于 2012-11-23T08:41:12.240 に答える
5

次のコード:

$(".something")[0]

jQueryセットから単一のDOM要素を取得します。このコードは、あなたがするのと同じことをします

document.getElementsByClassName("something")[0]

取得したDOM要素はval()jQueryオブジェクトではないため、メソッドがありません。

jQueryセットから最初のjQueryオブジェクト:eq()を取得するには、セレクター(または.eq()メソッド)または:firstセレクター(またはメソッド)のいずれかを使用できます.first()

$(".something:eq(0)");   // $(".something").eq(0);
$(".something:first");   // $(".something").first();
于 2012-11-23T08:41:28.793 に答える
2

インデックス()によるネイティブの場所[1]は、指定されたDOM要素を返します。
jQuery関数.first()は、他の関数を持つjQueryオブジェクト(jQueryスキンにラップされたほとんどのDOM要素)を返すようなものです。

于 2012-11-23T08:41:20.277 に答える