How do you check if a JavaScript Object is a DOM Object?

JavascriptDomObject

Javascript Problem Overview


I'm trying to get:

document.createElement('div')  //=> true
{tagName: 'foobar something'}  //=> false

In my own scripts, I used to just use this since I never needed tagName as a property:

if (!object.tagName) throw ...;

So for the second object, I came up with the following as a quick solution -- which mostly works. ;)

The problem is, it depends on browsers enforcing read-only properties, which not all do.

function isDOM(obj) {
  var tag = obj.tagName;
  try {
    obj.tagName = '';  // Read-only for DOM, should throw exception
    obj.tagName = tag; // Restore for normal objects
    return false;
  } catch (e) {
    return true;
  }
}

Is there a good substitute?

Javascript Solutions


Solution 1 - Javascript

This might be of interest:

function isElement(obj) {
  try {
    //Using W3 DOM2 (works for FF, Opera and Chrome)
    return obj instanceof HTMLElement;
  }
  catch(e){
    //Browsers not supporting W3 DOM2 don't have HTMLElement and
    //an exception is thrown and we end up here. Testing some
    //properties that all elements have (works on IE7)
    return (typeof obj==="object") &&
      (obj.nodeType===1) && (typeof obj.style === "object") &&
      (typeof obj.ownerDocument ==="object");
  }
}

It's part of the DOM, Level2.

Update 2: This is how I implemented it in my own library: (the previous code didn't work in Chrome, because Node and HTMLElement are functions instead of the expected object. This code is tested in FF3, IE7, Chrome 1 and Opera 9).

//Returns true if it is a DOM node
function isNode(o){
  return (
    typeof Node === "object" ? o instanceof Node : 
    o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName==="string"
  );
}

//Returns true if it is a DOM element    
function isElement(o){
  return (
    typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2
    o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName==="string"
);
}

Solution 2 - Javascript

The following IE8 compatible, super-simple code works perfectly.

The accepted answer does not detect all types of HTML elements. For example, SVG elements are not supported. In contrast, this answer works for HTML well as SVG.

See it in action here: https://jsfiddle.net/eLuhbu6r/

function isElement(element) {
    return element instanceof Element || element instanceof HTMLDocument;  
}

Solution 3 - Javascript

No need for hacks, you can just ask if an element is an instance of the DOM Element:

const isDOM = el => el instanceof Element

Solution 4 - Javascript

All solutions above and below (my solution including) suffer from possibility of being incorrect, especially on IE — it is quite possible to (re)define some objects/methods/properties to mimic a DOM node rendering the test invalid.

So usually I use the duck-typing-style testing: I test specifically for things I use. For example, if I want to clone a node I test it like this:

if(typeof node == "object" && "nodeType" in node &&
   node.nodeType === 1 && node.cloneNode){
  // most probably this is a DOM node, we can clone it safely
  clonedNode = node.cloneNode(false);
}

Basically it is a little sanity check + the direct test for a method (or a property) I am planning to use.

Incidentally the test above is a good test for DOM nodes on all browsers. But if you want to be on the safe side always check the presence of methods and properties and verify their types.

EDIT: IE uses ActiveX objects to represent nodes, so their properties do not behave as true JavaScript object, for example:

console.log(typeof node.cloneNode);              // object
console.log(node.cloneNode instanceof Function); // false

while it should return "function" and true respectively. The only way to test methods is to see if the are defined.

Solution 5 - Javascript

You could try appending it to a real DOM node...

function isDom(obj)
{
    var elm = document.createElement('div');
    try
    {
        elm.appendChild(obj);
    }
    catch (e)
    {
        return false;
    }

    return true;
}

Solution 6 - Javascript

A simple way to test if a variable is a DOM element (verbose, but more traditional syntax :-)

function isDomEntity(entity) {
  if(typeof entity	=== 'object' && entity.nodeType !== undefined){
     return true;
  }
  else{
     return false;
  }
}

Or as HTMLGuy suggested (short and clean syntax):

const isDomEntity = entity =>
  typeof entity === 'object' && entity.nodeType !== undefined

Solution 7 - Javascript

This is from the lovely JavaScript library MooTools:

if (obj.nodeName){
    switch (obj.nodeType){
	case 1: return 'element';
	case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
    }
}

Solution 8 - Javascript

How about Lo-Dash's _.isElement?

$ npm install lodash.iselement

And in the code:

var isElement = require("lodash.iselement");
isElement(document.body);

Solution 9 - Javascript

old thread, but here's an updated possibility for ie8 and ff3.5 users:

function isHTMLElement(o) {
    return (o.constructor.toString().search(/\object HTML.+Element/) > -1);
}

Solution 10 - Javascript

The using the root detection found [here][1], we can determine whether e.g. alert is a member of the object's root, which is then likely to be a window:

function isInAnyDOM(o) { 
  return (o !== null) && !!(o.ownerDocument && (o.ownerDocument.defaultView || o.ownerDocument.parentWindow).alert); // true|false
}

To determine whether the object is the current window is even simpler:

function isInCurrentDOM(o) { 
  return (o !== null) && !!o.ownerDocument && (window === (o.ownerDocument.defaultView || o.ownerDocument.parentWindow)); // true|false
}

This seems to be less expensive than the try/catch solution in the opening thread.

Don P

[1]: https://stackoverflow.com/questions/223991/how-can-i-get-the-window-object-that-an-html-node-belongs-to-using-javascript "how-can-i-get-the-window-object-that-an-html-node-belongs-to"

Solution 11 - Javascript

var IsPlainObject = function ( obj ) { return obj instanceof Object && ! ( obj instanceof Function || obj.toString( ) !== '[object Object]' || obj.constructor.name !== 'Object' ); },
    IsDOMObject = function ( obj ) { return obj instanceof EventTarget; },
    IsDOMElement = function ( obj ) { return obj instanceof Node; },
    IsListObject = function ( obj ) { return obj instanceof Array || obj instanceof NodeList; },

// In fact I am more likely t use these inline, but sometimes it is good to have these shortcuts for setup code

Solution 12 - Javascript

This could be helpful: isDOM

//-----------------------------------
// Determines if the @obj parameter is a DOM element
function isDOM (obj) {
    // DOM, Level2
    if ("HTMLElement" in window) {
        return (obj && obj instanceof HTMLElement);
    }
    // Older browsers
    return !!(obj && typeof obj === "object" && obj.nodeType === 1 && obj.nodeName);
}

In the code above, we use the double negation operator to get the boolean value of the object passed as argument, this way we ensure that each expression evaluated in the conditional statement be boolean, taking advantage of the Short-Circuit Evaluation, thus the function returns true or false

Solution 13 - Javascript

I think prototyping is not a very good solution but maybe this is the fastest one: Define this code block;

Element.prototype.isDomElement = true;
HTMLElement.prototype.isDomElement = true;

than check your objects isDomElement property:

if(a.isDomElement){}

I hope this helps.

Solution 14 - Javascript

You can see if the object or node in question returns a string type.

typeof (array).innerHTML === "string" => false
typeof (object).innerHTML === "string" => false
typeof (number).innerHTML === "string" => false
typeof (text).innerHTML === "string" => false

//any DOM element will test as true
typeof (HTML object).innerHTML === "string" => true
typeof (document.createElement('anything')).innerHTML === "string" => true

Solution 15 - Javascript

For the ones using Angular:

angular.isElement

https://docs.angularjs.org/api/ng/function/angular.isElement

Solution 16 - Javascript

According to mdn

> Element is the most general base class from which all objects in a Document inherit. It only has methods and properties common to all kinds of elements.

We can implement isElement by prototype. Here is my advice:

/**
 * @description detect if obj is an element
 * @param {*} obj
 * @returns {Boolean}
 * @example
 * see below
 */
function isElement(obj) {
  if (typeof obj !== 'object') {
    return false
  }
  let prototypeStr, prototype
  do {
    prototype = Object.getPrototypeOf(obj)
    // to work in iframe
    prototypeStr = Object.prototype.toString.call(prototype)
    // '[object Document]' is used to detect document
    if (
      prototypeStr === '[object Element]' ||
      prototypeStr === '[object Document]'
    ) {
      return true
    }
    obj = prototype
    // null is the terminal of object
  } while (prototype !== null)
  return false
}
console.log(isElement(document)) // true
console.log(isElement(document.documentElement)) // true
console.log(isElement(document.body)) // true
console.log(isElement(document.getElementsByTagName('svg')[0])) // true or false, decided by whether there is svg element
console.log(isElement(document.getElementsByTagName('svg'))) // false
console.log(isElement(document.createDocumentFragment())) // false

Solution 17 - Javascript

I think that what you have to do is make a thorough check of some properties that will always be in a dom element, but their combination won't most likely be in another object, like so:

var isDom = function (inp) {
    return inp && inp.tagName && inp.nodeName && inp.ownerDocument && inp.removeAttribute;
};

Solution 18 - Javascript

In Firefox, you can use the instanceof Node. That Node is defined in DOM1.

But that is not that easy in IE.

  1. "instanceof ActiveXObject" only can tell that it is a native object.
  2. "typeof document.body.appendChild=='object'" tell that it may be DOM object, but also can be something else have same function.

You can only ensure it is DOM element by using DOM function and catch if any exception. However, it may have side effect (e.g. change object internal state/performance/memory leak)

Solution 19 - Javascript

Perhaps this is an alternative? Tested in Opera 11, FireFox 6, Internet Explorer 8, Safari 5 and Google Chrome 16.

function isDOMNode(v) {
  if ( v===null ) return false;
  if ( typeof v!=='object' ) return false;
  if ( !('nodeName' in v) ) return false; 

  var nn = v.nodeName;
  try {
    // DOM node property nodeName is readonly.
    // Most browsers throws an error...
    v.nodeName = 'is readonly?';
  } catch (e) {
    // ... indicating v is a DOM node ...
    return true;
  }
  // ...but others silently ignore the attempt to set the nodeName.
  if ( v.nodeName===nn ) return true;
  // Property nodeName set (and reset) - v is not a DOM node.
  v.nodeName = nn;

  return false;
}

Function won't be fooled by e.g. this

isDOMNode( {'nodeName':'fake'} ); // returns false

Solution 20 - Javascript

This is what I figured out:

var isHTMLElement = (function () {
	if ("HTMLElement" in window) {
		// Voilà. Quick and easy. And reliable.
		return function (el) {return el instanceof HTMLElement;};
	} else if ((document.createElement("a")).constructor) {
		// We can access an element's constructor. So, this is not IE7
		var ElementConstructors = {}, nodeName;
		return function (el) {
			return el && typeof el.nodeName === "string" &&
				 (el instanceof ((nodeName = el.nodeName.toLowerCase()) in ElementConstructors 
				 	? ElementConstructors[nodeName] 
				 	: (ElementConstructors[nodeName] = (document.createElement(nodeName)).constructor)))
		}
	} else {
		// Not that reliable, but we don't seem to have another choice. Probably IE7
		return function (el) {
			return typeof el === "object" && el.nodeType === 1 && typeof el.nodeName === "string";
		}
	}
})();

To improve performance I created a self-invoking function that tests the browser's capabilities only once and assigns the appropriate function accordingly.

The first test should work in most modern browsers and was already discussed here. It just tests if the element is an instance of HTMLElement. Very straightforward.

The second one is the most interesting one. This is its core-functionality:

return el instanceof (document.createElement(el.nodeName)).constructor

It tests whether el is an instance of the construcor it pretends to be. To do that, we need access to an element's contructor. That's why we're testing this in the if-Statement. IE7 for example fails this, because (document.createElement("a")).constructor is undefined in IE7.

The problem with this approach is that document.createElement is really not the fastest function and could easily slow down your application if you're testing a lot of elements with it. To solve this, I decided to cache the constructors. The object ElementConstructors has nodeNames as keys with its corresponding constructors as values. If a constructor is already cached, it uses it from the cache, otherwise it creates the Element, caches its constructor for future access and then tests against it.

The third test is the unpleasant fallback. It tests whether el is an object, has a nodeType property set to 1 and a string as nodeName. This is not very reliable of course, yet the vast majority of users shouldn't even fall back so far.

This is the most reliable approach I came up with while still keeping performance as high as possible.

Solution 21 - Javascript

Test if obj inherits from Node.

if (obj instanceof Node){
    // obj is a DOM Object
}

Node is a basic Interface from which HTMLElement and Text inherit.

Solution 22 - Javascript

This will work for almost any browser. (No distinction between elements and nodes here)

function dom_element_check(element){
    if (typeof element.nodeType !== 'undefined'){
        return true;
    }
    return false;
}

Solution 23 - Javascript

differentiate a raw js object from a HTMLElement

function isDOM (x){
     return /HTML/.test( {}.toString.call(x) );
 }

use:

isDOM( {a:1} ) // false
isDOM( document.body ) // true

// OR

Object.defineProperty(Object.prototype, "is",
    {
        value: function (x) {
            return {}.toString.call(this).indexOf(x) >= 0;
        }
    });

use:

o={}; o.is("HTML") // false o=document.body; o.is("HTML") // true

Solution 24 - Javascript

Here's my version. It has support for elements from iframe

/**
 * @param {any} value
 * @param {any} view Optional. If the value is from an iframe, provide the iframe content window here.
 * @returns {boolean}
 */
function isHtmlElement(value, view) {
  if (value instanceof HTMLElement) return true
  if (view && value instanceof view.HTMLElement) return true

  return !!(
    value &&
    typeof value === 'object' &&
    value !== null &&
    value.nodeType === 1 &&
    typeof value.nodeName === 'string'
  )
}

Solution 25 - Javascript

here's a trick using jQuery

var obj = {};
var element = document.getElementById('myId'); // or simply $("#myId")

$(obj).html() == undefined // true
$(element).html() == undefined // false

so putting it in a function:

function isElement(obj){

   return (typeOf obj === 'object' && !($(obj).html() == undefined));

}

Solution 26 - Javascript

Not to hammer on this or anything but for ES5-compliant browsers why not just:

function isDOM(e) {
  return (/HTML(?:.*)Element/).test(Object.prototype.toString.call(e).slice(8, -1));
}

Won't work on TextNodes and not sure about Shadow DOM or DocumentFragments etc. but will work on almost all HTML tag elements.

Solution 27 - Javascript

A absolute right method, check target is a real html element primary code:

	(function (scope) {
		if (!scope.window) {//May not run in window scope
			return;
		}
		var HTMLElement = window.HTMLElement || window.Element|| function() {};

		var tempDiv = document.createElement("div");
		var isChildOf = function(target, parent) {

			if (!target) {
				return false;
			}
			if (parent == null) {
				parent = document.body;
			}
			if (target === parent) {
				return true;
			}
			var newParent = target.parentNode || target.parentElement;
			if (!newParent) {
				return false;
			}
			return isChildOf(newParent, parent);
		}
		/**
		 * The dom helper
		 */
		var Dom = {
			/**
			 * Detect if target element is child element of parent
			 * @param {} target The target html node
			 * @param {} parent The the parent to check
			 * @returns {} 
			 */
			IsChildOf: function (target, parent) {
				return isChildOf(target, parent);
			},
			/**
			 * Detect target is html element
			 * @param {} target The target to check
			 * @returns {} True if target is html node
			 */
			IsHtmlElement: function (target) {
				if (!X.Dom.IsHtmlNode(target)) {
					return false;
				}
				return target.nodeType === 1;
			},
			/**
			 * Detect target is html node
			 * @param {} target The target to check
			 * @returns {} True if target is html node
			 */
			IsHtmlNode:function(target) {
				if (target instanceof HTMLElement) {
					return true;
				}
				if (target != null) {
					if (isChildOf(target, document.documentElement)) {
						return true;
					}
					try {
						tempDiv.appendChild(target.cloneNode(false));
						if (tempDiv.childNodes.length > 0) {
							tempDiv.innerHTML = "";
							return true;
						}
					} catch (e) {

					}
				}
				return false;
			}
		};
		X.Dom = Dom;
	})(this);

Test In IE 5

Solution 28 - Javascript

I have a special way to do this that has not yet been mentioned in the answers.

My solution is based on four tests. If the object passes all four, then it is an element:

  1. The object is not null.

  2. The object has a method called "appendChild".

  3. The method "appendChild" was inherited from the Node class, and isn't just an imposter method (a user-created property with an identical name).

  4. The object is of Node Type 1 (Element). Objects that inherit methods from the Node class are always Nodes, but not necessarily Elements.

Q: How do I check if a given property is inherited and isn't just an imposter?

A: A simple test to see if a method was truly inherited from Node is to first verify that the property has a type of "object" or "function". Next, convert the property to a string and check if the result contains the text "[Native Code]". If the result looks something like this:

function appendChild(){
[Native Code]
}

Then the method has been inherited from the Node object. See https://davidwalsh.name/detect-native-function

And finally, bringing all the tests together, the solution is:

function ObjectIsElement(obj) {
    var IsElem = true;
    if (obj == null) {
        IsElem = false;
    } else if (typeof(obj.appendChild) != "object" && typeof(obj.appendChild) != "function") {
        //IE8 and below returns "object" when getting the type of a function, IE9+ returns "function"
        IsElem = false;
    } else if ((obj.appendChild + '').replace(/[\r\n\t\b\f\v\xC2\xA0\x00-\x1F\x7F-\x9F ]/ig, '').search(/\{\[NativeCode]}$/i) == -1) {
        IsElem = false;
    } else if (obj.nodeType != 1) {
        IsElem = false;
    }
    return IsElem;
}

Solution 29 - Javascript

Each DOMElement.constructor returns function HTML...Element() or [Object HTML...Element] so...

function isDOM(getElem){
	if(getElem===null||typeof getElem==="undefined") return false;
	var c = getElem.constructor.toString();
	var html = c.search("HTML")!==-1;
	var element = c.search("Element")!==-1;
	return html&&element;
}

Solution 30 - Javascript

(element instanceof $ && element.get(0) instanceof Element) || element instanceof Element

This will check for even if it is a jQuery or JavaScript DOM element

Solution 31 - Javascript

The only way to guarentee you're checking an actual HTMLEement, and not just an object with the same properties as an HTML Element, is to determine if it inherits from Node, since its impossible to make a new Node() in JavaScript. (unless the native Node function is overwritten, but then you're out of luck). So:

function isHTML(obj) {
    return obj instanceof Node;
}

console.log(
  isHTML(test),
  isHTML(ok),
  isHTML(p),
  isHTML(o),
  isHTML({
    constructor: {
      name: "HTML"
    }
  }),
  isHTML({
    __proto__: {
      __proto__: {
        __proto__: {
          __proto__: {
            constructor: {
              constructor: { 
                name: "Function"
                
              },
              name: "Node"
            }
          }
        }
      }
    }
  }),
)

<div id=test></div>
<blockquote id="ok"></blockquote>
<p id=p></p>
<br id=o>
<!--think of anything else you want--!>

Solution 32 - Javascript

var isElement = function(e){
    try{
        // if e is an element attached to the DOM, we trace its lineage and use native functions to confirm its pedigree
        var a = [e], t, s, l = 0, h = document.getElementsByTagName('HEAD')[0], ht = document.getElementsByTagName('HTML')[0];
        while(l!=document.body&&l!=h&&l.parentNode) l = a[a.push(l.parentNode)-1];
        t = a[a.length-1];
        s = document.createElement('SCRIPT');	// safe to place anywhere and it won't show up
        while(a.length>1){	// assume the top node is an element for now...
            var p = a.pop(),n = a[a.length-1];
            p.insertBefore(s,n);
        }
        if(s.parentNode)s.parentNode.removeChild(s);
        if(t!=document.body&&t!=h&&t!=ht)
            // the top node is not attached to the document, so we don't have to worry about it resetting any dynamic media
            // test the top node
            document.createElement('DIV').appendChild(t).parentNode.removeChild(t);
        return e;
    }
    catch(e){}
    return null;
}

I tested this on Firefox, Safari, Chrome, Opera and IE9. I couldn't find a way to hack it.
In theory, it tests every ancestor of the proposed element, as well as the element itself, by inserting a script tag before it.
If its first ancestor traces back to a known element, such as <html>, <head> or <body>, and it hasn't thrown an error along the way, we have an element.
If the first ancestor is not attached to the document, we create an element and attempt to place the proposed element inside of it, (and then remove it from the new element).
So it either traces back to a known element, successfully attaches to a known element or fails.
It returns the element or null if it is not an element.

Solution 33 - Javascript

The easiest and cross-browser way to detect if an element is part of HTML DOM is as below:

function inHTMLDom(myelement){
	if(myelement.ownerDocument.documentElement.tagName.toLowerCase()=="html"){
		return true;
	}else{
		return false;
	}
}

inHTMLDom(<your element>); // <your element>:element you are interested in checking.

tested in IE6,IE7,IE8,IE9,IE10,FF,Chrome,Safari,Opera.

Solution 34 - Javascript

Most answers use some kind of duck typing, checking for example that the object has a nodeType property. But that's not enough, because non-nodes can also have node-like properties.

The other common approach is instanceof, which can produce false positives e.g. with Object.create(Node), which is not a node despite inheriting node properties.

Moreover, both approaches above call internal essential methods, which can be problematic e.g. if the tested value is a proxy.

Instead, what I recommend is borrowing a node method and calling it on our object. The browser will check that the value is a node probably by looking at internal slots not customizable in proxies, so even they won't be able to interfere with our check.

function isNode(value) {
  try {
    Node.prototype.cloneNode.call(value, false);
    return true;
  } catch(err) {
    return false;
  }
}

You can also use property getters, if you prefer.

function isNode(value) {
  try {
    Object.getOwnPropertyDescriptor(Node.prototype,'nodeType').get.call(value);
    return true;
  } catch(err) {
    return false;
  }
}

Similarly, if you want to test if a value is an element, you can use

function isElement(value) {
  try {
    Element.prototype.getAttribute.call(value, '');
    return true;
  } catch(err) {
    return false;
  }
}

function isHTMLElement(value) {
  try {
    HTMLElement.prototype.click.call(value);
    return true;
  } catch(err) {
    return false;
  }
}

Solution 35 - Javascript

if you are using jQuery, try this

$('<div>').is('*') // true
$({tagName: 'a'}).is('*') // false
$({}).is('*') // false
$([]).is('*') // false
$(0).is('*') // false
$(NaN).is('*') // false

Solution 36 - Javascript

I use this function:

function isHTMLDOMElement(obj) {
  if (Object.prototype.toString.call(obj).slice(-8) === 'Element]') {
    if (Object.prototype.toString.call(obj).slice(0, 12) === '[object HTML') {
      return true;
    }
    return false;
  }
  return false;
}

https://jsfiddle.net/1qazxsw2/wz7e0fvj/9/

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJonathan LonowskiView Question on Stackoverflow
Solution 1 - JavascriptsomeView Answer on Stackoverflow
Solution 2 - JavascriptMonarch WadiaView Answer on Stackoverflow
Solution 3 - JavascriptDamian PavlicaView Answer on Stackoverflow
Solution 4 - JavascriptEugene LazutkinView Answer on Stackoverflow
Solution 5 - JavascriptGregView Answer on Stackoverflow
Solution 6 - JavascriptRomanView Answer on Stackoverflow
Solution 7 - JavascriptfinpingvinView Answer on Stackoverflow
Solution 8 - JavascriptmightyiamView Answer on Stackoverflow
Solution 9 - JavascriptCypherView Answer on Stackoverflow
Solution 10 - JavascriptDon PView Answer on Stackoverflow
Solution 11 - JavascriptErich HornView Answer on Stackoverflow
Solution 12 - JavascriptjheraxView Answer on Stackoverflow
Solution 13 - JavascriptDoğuş AtasoyView Answer on Stackoverflow
Solution 14 - Javascripttimewaster51View Answer on Stackoverflow
Solution 15 - JavascriptAlvisView Answer on Stackoverflow
Solution 16 - JavascriptxianshengluView Answer on Stackoverflow
Solution 17 - JavascriptAndreas GrechView Answer on Stackoverflow
Solution 18 - JavascriptDennis CView Answer on Stackoverflow
Solution 19 - JavascriptSnoozer ManView Answer on Stackoverflow
Solution 20 - JavascriptOliver SartunView Answer on Stackoverflow
Solution 21 - JavascriptsoslanView Answer on Stackoverflow
Solution 22 - JavascriptZv_oDDView Answer on Stackoverflow
Solution 23 - JavascriptbortunacView Answer on Stackoverflow
Solution 24 - JavascriptRannie Aguilar PeraltaView Answer on Stackoverflow
Solution 25 - JavascriptMatusView Answer on Stackoverflow
Solution 26 - JavascriptTravis KaufmanView Answer on Stackoverflow
Solution 27 - JavascriptdexiangView Answer on Stackoverflow
Solution 28 - Javascriptuser3163495View Answer on Stackoverflow
Solution 29 - JavascriptPawełView Answer on Stackoverflow
Solution 30 - JavascriptArjun KakkarView Answer on Stackoverflow
Solution 31 - JavascriptB''H Bi'ezras -- Boruch HashemView Answer on Stackoverflow
Solution 32 - JavascriptJoshView Answer on Stackoverflow
Solution 33 - Javascriptkcak11View Answer on Stackoverflow
Solution 34 - JavascriptOriolView Answer on Stackoverflow
Solution 35 - JavascriptWilliam LeungView Answer on Stackoverflow
Solution 36 - JavascriptanonymousView Answer on Stackoverflow