Vanilla JS
Vous êtes français ? Le README derrière ce lien vous sera peut-être plus agréable.

Overview
Vanilla JS is a fast, lightweight, cross-platform tool for building incredible, powerful JavaScript applications.
Use in Development
Just put the following code:
<!-- <script src="path/to/vanilla.js"></script> -->
Use in Production
The much faster method:
Summary
- Overview
- Summary
- Speed Comparison
- From jQuery to Vanilla JS
Speed Comparison
When Vanilla JS perform 100 operations, others do:
Retrieve DOM element by ID
Code | 100 ops Vanilla JS | |
---|---|---|
Vanilla JS | document.getElementById("vanilla"); | 100 |
Dojo | dojo.byId("dojo"); | 92 |
Prototype JS | $("prototype"); | 57 |
jQuery | $("#jquery"); | 42 |
MooTools | document.id("mootools"); | 24 |
Retrieve 10 DOM elements by tag name
Code | 100 ops Vanilla JS | |
---|---|---|
Vanilla JS | document.getElementsByTagName("div"); | 100 |
Prototype JS | Prototype.Selector.select("div", document); | 25 |
jQuery | $("div"); | 21 |
jQuery | dojo.query("div"); | 3 |
MooTools | Slick.search(document, "div", new Elements); | 2 |
Vanilla JS vs jQuery
Retrieve 10 DOM elements by class name
Code | 100 ops Vanilla JS | |
---|---|---|
Vanilla JS | document.getElementsByClassName("vanilla"); | 100 |
jQuery | $(".jquery"); | 25 |
<#id> .inner span
selector
Retrieve DOM element with Code | 100 ops Vanilla JS | |
---|---|---|
Vanilla JS | document.querySelector("#vanilla .inner span"); | 100 |
jQuery | $("#jquery .inner span"); | 17 |
<.className> .inner span
selector
Retrieve 10 DOM elements with Code | 100 ops Vanilla JS | |
---|---|---|
Vanilla JS | document.querySelectorAll(".vanilla .inner span"); | 100 |
jQuery | $(".jquery .inner span"); | 51 |
Vanilla JS Selector Performances
All tests are based on <section id="vanilla" class="vanilla"><article class="inner"><div class="target" id="target"></div></article></section>
HTML.
Select node <div class="target" id="target"></div> |
100 ops Vanilla JS |
---|---|
document.getElementsByTagName("div"); | 100 |
document.getElementById("target"); | 99 |
document.getElementsByClassName("target"); | 96 |
document.querySelector(".vanilla .inner div"); | 68 |
document.querySelectorAll(".vanilla .inner div"); | 35 |
From jQuery to Vanilla JS
Legend
Understand each type of DOM Object:
(Text into) Html Element <!-- Comment Element --> Text Element (Text into) Html Element
querySelector(".example")
return aHTMLElement
.querySelector(".example").children
return aHTMLCollection
, each collection's item is aHTMLElement
, two[span, span]
here.querySelector(".example").childNodes
return aNodeList
, each collection's item is aNode
, seven[text, span, text, comment, text, span, text]
here.querySelector(".example").childNodes[0]
return aText
(Node
) oftypeNode
3, as a text. (...nodeList[3]
istypeNode
8 as aComment
(Node
too)).
.Node #Selector
#id
From jQuery
var htmlElement = 0;
to Vanilla JS
var htmlElement = document;
.classname #id tagname
From jQuery
var htmlElement = 0;
to Vanilla JS
document;
[.classname #id tagname]
From jQuery
;
to Vanilla JS
var nodeList = document; // Not Live (Snapshot)forEach;
[.classname]
From jQuery
;
to Vanilla JS
var htmlCollection = document; // Live// var nodeList = document.querySelectorAll(".classname"); // Not Live (Snapshot)forEach;
[name]
From jQuery
;
to Vanilla JS
var nodeList = document; // Live// var nodeList = document.querySelectorAll("[name=name]"); // Not Live (Snapshot)forEach;
[tagname]
From jQuery
;
to Vanilla JS
var htmlCollection = document; // Live// var nodeList = document.querySelectorAll("tagname"); // Not Live (Snapshot)forEach;
Reverted Loop
From jQuery
;
to Vanilla JS
var htmlCollection = document // Live i = htmlCollectionlength;while htmlElement = htmlCollection--i htmlElement;
AJAX
GET
From jQuery
$;
to Vanilla JS
var get = ;get;get;get;
JSON
From jQuery
{ $;} ;
to Vanilla JS
{ var request = ; request; request; request; request;} ;
POST
From jQuery
$;
to Vanilla JS
var post = ;post;post;post;
Request / Response
From jQuery
{ $;} ;
to Vanilla JS
{ var request = ; request; request; request; request;} ;
ATTRIBUTS
Add Class
From jQuery
;
to Vanilla JS
<htmlElement>classList;
Get Attribute
From jQuery
;
to Vanilla JS
<htmlElement>;
Get Data
From jQuery
data<dataName>;
to Vanilla JS
<htmlElement>;
Get Value
From jQuery
value;
to Vanilla JS
<htmlElement>value;
Has Class
From jQuery
;
to Vanilla JS
<htmlElement>classList;
Remove Attribute
From jQuery
;
to Vanilla JS
<htmlElement>;
Remove Class
From jQuery
;
to Vanilla JS
<htmlElement>classList;
Remove Data
From jQuery
;
to Vanilla JS
<htmlElement>;
Set Attribute
From jQuery
;
to Vanilla JS
<htmlElement>;
Set Data
From jQuery
data<dataName> <value>;
to Vanilla JS
<htmlElement>;
Set Value
From jQuery
value<value>;
to Vanilla JS
<htmlElement>value = <value>;
Toggle Class
From jQuery
;
to Vanilla JS
<htmlElement>classList;
EFFECTS
Animation
From jQuery
{ $htmlElement;};
to Vanilla JS
{ var last = + { htmlElementstyleopacity = +htmlElementstyleopacity + - last / speed; last = +; if +htmlElementstyleopacity < 1 ; else if next next; }; htmlElementstyleopacity = 0; ;} ;
Hide
From jQuery
;
to Vanilla JS
<htmlElement>styledisplay = "none";
Show
From jQuery
;
to Vanilla JS
<htmlElement>styledisplay = "";
EVENTS
Hover
From jQuery
;
to Vanilla JS
<htmlElement>;<htmlElement>;
Load
From jQuery
;
to Vanilla JS
<htmlElement>;
Off
From jQuery
;
to Vanilla JS
<htmlElement>;
On
From jQuery
;
to Vanilla JS
<htmlElement>;
One
From jQuery
;
to Vanilla JS
<htmlElement>;
Ready
From jQuery
;
to Vanilla JS
document;
Trigger
From jQuery
var event = jQuery;eventtest = true; ;;// $(<htmlElement>).trigger("click"); // Shortcut without test property.
to Vanilla JS
var event = "click";eventtest = true; <htmlElement>;<htmlElement>;
FILTERS
Filter
From jQuery
filterCondition
;
to Vanilla JS
var nodeList = document; nodeList = filter; forEach;
First
From jQuery
;
to Vanilla JS
<htmlCollection>;// <htmlCollection>[0];
Has
From jQuery
;
to Vanilla JS
var nodeList = document;filter;
Is
From jQuery
;
to Vanilla JS
var nodeList = document;some;
Item
From jQuery
;
to Vanilla JS
<htmlCollection>;// <htmlCollection>[<index>];
Last
From jQuery
;
to Vanilla JS
<htmlCollection>;// <htmlCollection>[<htmlCollection>.length - 1];
Not
From jQuery
;
to Vanilla JS
var nodeList = document;filter;
Slice
From jQuery
;
to Vanilla JS
var nodeList = document;slice;
MANIPULATION
Append
From jQuery
;// $(<htmlElement>).append(<appendHtmlElement>);
to Vanilla JS
<htmlElement>;// <htmlElement>.insertAdjacentHTML("beforeEnd", "<htmlString>");
Clone
From jQuery
;
to Vanilla JS
<htmlElement>;
Compare
From jQuery
var $a = ; $b = ; $a;
to Vanilla JS
var temp = document0 a = temp0 b = document; a === b;
Contains
From jQuery
$;
to Vanilla JS
<htmlElement> !== <childHtmlElement> && <htmlElement>;
Create
From jQuery
;
to Vanilla JS
document;
Empty
From jQuery
;
to Vanilla JS
<htmlElement>innerHTML = "";
Get HTML
From jQuery
;
to Vanilla JS
<htmlElement>innerHTML;
Get Node HTML
From jQuery
;
to Vanilla JS
<htmlElement>outerHTML;
Get Text
From jQuery
text;
to Vanilla JS
<htmlElement>textContent;
Index From Parent
From jQuery
index;
to Vanilla JS
slice;
Insert After
From jQuery
;// $(<htmlElement>).after(<htmlString>);
to Vanilla JS
<htmlElement>parentNode;// <htmlElement>.insertAdjacentHTML("afterend", <htmlString>);
Insert Before
From jQuery
;// $(<htmlElement>).before(<htmlString>);
to Vanilla JS
<htmlElement>parentNode;// <htmlElement>.insertAdjacentHTML("beforebegin", <htmlString>);
Prepend
From jQuery
;// $(<htmlElement>).prepend(<htmlString>);
to Vanilla JS
<htmlElement>;// <htmlElement>.insertAdjacentHTML("afterBegin", "<htmlString>");
Remove
From jQuery
;
to Vanilla JS
<htmlElement>parentNode;
Remove Children
From jQuery
;
to Vanilla JS
while <htmlElement>firstChild <htmlElement>;// <htmlElement>.innerHTML = '';
Replace
From jQuery
;
to Vanilla JS
<htmlElement>parentNode;
Set HTML
From jQuery
;
to Vanilla JS
<htmlElement>innerHTML = <htmlString>;
Set Node HTML
From jQuery
;
to Vanilla JS
<htmlElement>outerHTML = <htmlString>;
Set Text
From jQuery
text<string>;
to Vanilla JS
<htmlElement>textContent = <string>;
Unwrap
From jQuery
;
to Vanilla JS
while <htmlElement>firstChild <unwrapHtmlElement>;<unwrapHtmlElement>;
Wrap
From jQuery
;
to Vanilla JS
<htmlElement>parentNode;<wrapHtmlElement>;
TRAVERSING
All Next
From jQuery
;
to Vanilla JS
var nextAll = false;nextAll = filter;
All Parents
From jQuery
var parents = ;
to Vanilla JS
var htmlElement = <htmlElement> parents = ;while htmlElement = htmlElementparentNode parents;parents;
All Previous
From jQuery
;
to Vanilla JS
var prevAll = true;prevAll = filter;
Children
From jQuery
;
to Vanilla JS
<htmlElement>children;
Closest Parent
From jQuery
;
to Vanilla JS
var htmlElement = <htmlElement> parents = ;while htmlElement = htmlElementparentNode htmlElementmatches && htmlElement ? parents : "";parents0;// <htmlElement>.closest(<parentSelector>); // More fast but not supported by IE/EDGE
Find Children
From jQuery
;
to Vanilla JS
<htmlElement>;
First Child
From jQuery
;
to Vanilla JS
<htmlElement>firstChild;
Last Child
From jQuery
;
to Vanilla JS
<htmlElement>lastChild;
Matches Selector
From jQuery
;
to Vanilla JS
<htmlElement>;
Next
From jQuery
next;
to Vanilla JS
<htmlElement>nextElementSibling; // HTMLElement// <htmlElement>.nextSibling; // Node
Next Until
From jQuery
;
to Vanilla JS
var htmlElement = <htmlElement> nextUntil = until = true;while htmlElement = htmlElementnextElementSibling until && htmlElement && !htmlElement ? nextUntil : until = false;nextUntil;
Parent
From jQuery
parent;
to Vanilla JS
<htmlElement>parentNode;
Parents
From jQuery
var parents = ;
to Vanilla JS
var htmlElement = <htmlElement> parents = ;while htmlElement = htmlElementparentNode htmlElementmatches && htmlElement ? parents : "";/* // More fast alternative but not supported by IE/Edgewhile (htmlElement = htmlElement.parentNode.closest(<parentSelector>)) { parents.push(htmlElement); */parents;
Parents Until
From jQuery
var parents = ;
to Vanilla JS
var htmlElement = <htmlElement> parentsUntil = until = true;while htmlElement = htmlElementparentNode until && htmlElementmatches && !htmlElement ? parents : until = false;/* // More fast alternative but not supported by IE/Edgewhile (htmlElement = htmlElement.parentNode.closest(<parentSelector>)) { (until) ? parents.push(htmlElement) : until = false; */parentsUntil;
Previous
From jQuery
;
to Vanilla JS
<htmlElement>previousElementSibling; // HTMLElement// <htmlElement>.previousSibling // Node;
Previous Until
From jQuery
;
to Vanilla JS
var htmlElement = <htmlElement> previousUntil = until = true;while htmlElement = htmlElementpreviousElementSibling until && htmlElement && !htmlElement ? previousUntil : until = false;previousUntil;
Siblings
From jQuery
;
to Vanilla JS
filter;
STYLES
Get Style
From jQuery
;
to Vanilla JS
<property>;
Get Scroll Left
From jQuery
;
to Vanilla JS
<htmlElement>scrollLeft;
Get Scroll Top
From jQuery
;
to Vanilla JS
<htmlElement>scrollTop;
Inner Height
From jQuery
innerHeight;
to Vanilla JS
<htmlElement>clientHeight
Inner Width
From jQuery
innerWidth;
to Vanilla JS
<htmlElement>clientWidth
Offset from Document
From jQuery
;
to Vanilla JS
var rect = <htmlElement> top: recttop + documentbodyscrollTop left: rectleft + documentbodyscrollLeft
Offset from Parent
From jQuery
;
to Vanilla JS
left: <htmlElement>offsetLeft top: <htmlElement>offsetTop
Offset from Viewport
From jQuery
;
to Vanilla JS
var rect = <htmlElement> top: recttop + documentbodyscrollTop left: rectleft + documentbodyscrollLeft
Outer Height
From jQuery
outerHeight;
to Vanilla JS
<htmlElement>offsetHeight
Outer Width
From jQuery
outerWidth;
to Vanilla JS
<htmlElement>offsetWidth
Parent Not Static
From jQuery
;
to Vanilla JS
<htmlElement>offsetParent || <htmlElement>
Set Style
From jQuery
;
to Vanilla JS
<htmlElement>style<property> = <value>;
Set Scroll Left
From jQuery
;
to Vanilla JS
<htmlElement>scrollLeft = <distance>;
Set Scroll Top
From jQuery
;
to Vanilla JS
<htmlElement>scrollTop = <distance>;
UTILS
Array Each
From jQuery
$;
to Vanilla JS
<array>;
Change Futur Context
From jQuery
$;
to Vanilla JS
<fn>;
Extend
From jQuery
<object> = $;
to Vanilla JS
// <object> = Object.assign(<object>, <extendingObject>); // Deep extend but not supported by IEObject;<object>;
Index Of
From jQuery
$;
to Vanilla JS
<array>;
Is Array
From jQuery
$;
to Vanilla JS
Array;
Map
From jQuery
$;
to Vanilla JS
<array>;
Now
From jQuery
$;
to Vanilla JS
Date;
Parse HTML
From jQuery
$;
to Vanilla JS
{ var body = documentimplementationbody; bodyinnerHTML = htmlString; return bodychildNodes;} ;
Parse JSON
From jQuery
$;
to Vanilla JS
JSON;
Parse XML
From jQuery
$;
to Vanilla JS
{ return ;} ;
Serialize Array
From jQuery
$;
to Vanilla JS
{ var field length output = ; if typeof form === "object" && formnodeName === "FORM" var length = formelementslength; for i = 0; i < length; i++ field = formelementsi; if fieldname && !fielddisabled && fieldtype !== "file" && fieldtype != "reset" && fieldtype != "submit" && fieldtype != "button" if fieldtype === "select-multiple" length = formelementsioptionslength; for j = 0; j < length; j++ iffieldoptionsjselected outputoutputlength = name: fieldname value: fieldoptionsjvalue ; else if fieldtype !== "checkbox" && fieldtype !== "radio" || fieldchecked outputoutputlength = name: fieldname value: fieldvalue ; return output;};
Serialize String
From jQuery
$;
to Vanilla JS
{ var field length output = ; if typeof form === "object" && formnodeName === "FORM" var length = formelementslength; for var i = 0; i < length; i++ field = formelementsi; if fieldname && !fielddisabled && fieldtype !== "file" && fieldtype !== "reset" && fieldtype !== "submit" && fieldtype !== 'button' if fieldtype === "select-multiple" length = formelementsioptionslength; for var j=0; j < length; j++ if fieldoptionsjselected outputoutputlength = + "=" + ; else if fieldtype !== "checkbox" && fieldtype !== "radio" || fieldchecked outputoutputlength = + "=" + ; return output;};
Trim
From jQuery
$;
to Vanilla JS
<string>;