5

我正在使用 jQuery 选择一组输入对象,当我在选择一个数组元素后尝试将多个方法链接在一起时遇到了一个有趣的问题。谁能向我解释为什么我会出现这种行为?

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或选择其中一个元素.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

index ( [1]) 的本地位置返回指定的 DOM 元素。
jQuery 函数,比如.first()返回一个 jQuery 对象(包含在 jQuery 皮肤中的相当多的 DOM 元素),它具有那些其他函数。

于 2012-11-23T08:41:20.277 回答