Skip to content Skip to sidebar Skip to footer

Jquery Push Function

I'm working on samsung SDK and modifying a javascript app for smart tv. I stumbled upon this piece of code and I don't understand what if($('.menuButton').push()){... does. The nat

Solution 1:

Calling .push(x) on a JQuery selector acts the same as calling .push(x) on a normal array in Javascript.

From W3Schools and the Mozilla Developer Network:

The push() method adds new items to the end of an array, and returns the new length.

and

Returns: The new length property of the object upon which the method was called.

If no arguments are passed to .push(), then the array is left as-is, and the length is still returned. So what is happening here is the array length is being returned and used to evaluate the if statement.

Example: The following will return the number of p tags:

$("p").push();

But Beware: The .push method for JQuery objects is marked for internal use only and thus should not be depended on.

Solution 2:

This method should not be relied upon. Don't use it.

push() is defined on the jQuery object (which is an array-like object), and it maps to the native Array.prototype.push() method, but it is meant for internal use only, not documented and you cannot be sure it will work the same way in future versions.

In this code, it seems to be used to get the number of elements in the jQuery object (which is what the native .push() does, it returns the value of the length property).

But there is a documented way to do that:

$('.menuButton').length

The code relies on the fact that if the length is zero, it will evaluate to false in Javascript when converted to a Boolean, so the code in the if block will only run if the jQuery object is not empty.

Solution 3:

I'm not sure what $().push does or if it even exists (not to be confused with the native JavaScript array.push() method), but you are probably looking for $().add:

Given a jQuery object that represents a set of DOM elements, the .add() method constructs a new jQuery object from the union of those elements and the ones passed into the method.

Also note that a jQuery object can never be false, your if statement should probably be:

if($('.menuButton').add(something).length > 0) {

Edit: it looks like you are using an internal-only, undocumented, and unsupported method of jQuery. If you want to get the length of the current jQuery object (which is what $().push() appears to do), just use length:

if($('.menuButton').length > 0) {

Post a Comment for "Jquery Push Function"