I'm selecting an array of input objects using jQuery and I'm running into an interesting problem when I try to chain together multiple methods after selecting one of the array elements. Can anyone explain to me why I get this behavior?
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">
]
If I select one of the elements using jQuery .first() or .last() and then call .val(), I get the expected value of "138". 
When I try to use a location in the array, I can return the element of the array:
var input = jQuery('.custom-size').first().find('input:hidden')[1]
returns => 
<input name="custom_order[custom_sizes_attributes][0][_destroy]" type="hidden" value="0">
I can't call .val() on this object however. Instead I get this error message:
TypeError: Object #<HTMLInputElement> has no method 'val'
I can use .slice(x,y) to return the single element, but this seems rather silly. What am I missing here.
The following code:
$(".something")[0]
gets a single DOM element from the jQuery set. This code does the same as if you do
document.getElementsByClassName("something")[0]
Retrieved DOM element doesn't have val() method, since it is not a jQuery object.
In order to get the first jQuery object from jQuery set, you may use either :eq() selector (or .eq() method), or :first selector (or .first() method):
$(".something:eq(0)");   // $(".something").eq(0);
$(".something:first");   // $(".something").first();
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With