Skip to content

Vanilla JS is a fast, lightweight, cross-platform framework for building incredible, powerful JavaScript applications.

Notifications You must be signed in to change notification settings

DigitalCoder/vanilla-js

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

Repository files navigation

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 framework 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

Speed Comparison

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

Retrieve DOM element with <#id> .inner span selector

Code 100 ops Vanilla JS
Vanilla JS document.querySelector("#vanilla .inner span"); 100
jQuery $("#jquery .inner span"); 17

Retrieve 10 DOM elements with <.className> .inner span selector

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.

Selectionner le noeud <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

.Selector #Dom

#id

From jQuery

$("#id")[0];

to Vanilla JS

document.getElementById("id");

.classname #id tagname

From jQuery

$("#id .classname tagname")[0];

to Vanilla JS

document.querySelector("#id .classname tagname");</code></pre>
    </blockquote>
</div>

[.classname #id tagname]

From jQuery

$("#id .classname tagname").each(function (i, element) {
    element;
});

to Vanilla JS

var elements = document.querySelectorAll("#id .classname tagname");
[].forEach.call(elements, function (element) {
    element;
});

[.classname]

From jQuery

$(".classname").each(function (i, element) {
    element;
});

to Vanilla JS

var elements = document.getElementsByClassName(".classname");
[].forEach.call(elements, function(element) {
    element;
});

[tagname]

From jQuery

$("div").each(function (i, element) {
    element;
});

to Vanilla JS

var elements = document.getElementsByTagName("div");
[].forEach.call(elements, function(element) {
    element;
});

AJAX

GET

From jQuery

$.ajax({
  type: "GET",
  url: &lt;url>,
  data: &lt;data>
});

to Vanilla JS

var get = new XMLHttpRequest();
get.open("GET", &lt;url>, true);
get.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
get.send(&lt;data>);

JSON

From jQuery

function getJSON(url, next) {
    $.getJSON(url, function (data) {
      next(null, data);
    }).error(function () {
      next(new Error("There was a connection error of some sort."));
    });
}

getJSON(&lt;url>, function (err, data) {
    if (err) {
      return err;
    }

    data;
});

to Vanilla JS

function getJSON(url, next) {
    var request = new XMLHttpRequest();
    request.open("GET", url, true);
    request.send();

    request.addEventListener("load", function () {
        if (request.status < 200 && request.status >= 400) {
            return next(new Error("We reached our target server, but it returned an error."));
        }

        next(null, JSON.parse(request.responseText));
    });

    request.addEventListener("error", function () {
        return next(new Error("There was a connection error of some sort."));
    });
}

getJSON(&lt;url>, function (err, data) {
    if (err) {
      return err;
    }

    data;
});

POST

From jQuery

$.ajax({
  type: "POST",
  url: &lt;url>,
  data: &lt;data>
});

to Vanilla JS

var post = new XMLHttpRequest();
post.open("POST", &lt;url>, true);
post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
post.send(&lt;data>);

Request / Response

From jQuery

function request(url, next) {
    $.ajax({
        type: 'GET',
        url: url,
        success: function(response) {
          next(null, response);
        },
        error: function() {
          next(new Error("There was a connection error of some sort."));
        }
    });
}

request(&gt;url>, function (err, response) {
    if (err) {
      return err;
    }

    response;
});

to Vanilla JS

function request(url, next) {
    var request = new XMLHttpRequest();
    request.open("GET", url, true);
    request.send();

    request.addEventListener("load", function () {
        if (request.status < 200 && request.status >= 400) {
            return next(new Error("We reached our target server, but it returned an error."));
        }

        next(null, request.responseText);
    });

    request.addEventListener("error", function () {
        return next(new Error("There was a connection error of some sort."));
    });
}

request(&gt;url>, function (err, response) {
    if (err) {
      return err;
    }

    response;
});

EFFECTS

Animation

From jQuery

function fadeIn($element, speed, next) {
    $element.css("opacity", "0").animate({ opacity: 1 }, speed, next);
}
fadeIn($(&lt;element>), 2000, function () {
  $(this).css("opacity", "");
});

to Vanilla JS

function fadeIn(element, speed, next) {
    var last = +new Date(),
        tick = function () {
            element.style.opacity = +element.style.opacity + (new Date() - last) / speed;

            last = +new Date();

            if (+element.style.opacity < 1) {
                requestAnimationFrame(tick);
            } else if (next) {
                next.call(element);
            }
        };

    element.style.opacity = 0;
    tick();
}

fadeIn(&lt;element>, 2000, function () {
    this.style.opacity = '';
});

Hide

From jQuery

$(&lt;element>).hide();

to Vanilla JS

&lt;element>.style.display = "none";

Show

From jQuery

$(&lt;element>).show();

to Vanilla JS

&lt;element>.style.display = "";

ELEMENTS

Add Class

From jQuery

$(&lt;element>).addClass(&lt;className>);

to Vanilla JS

&lt;element>.classList.add(&lt;className>);

Append

From jQuery

$(&lt;element>).append(&lt;movedElement>);

to Vanilla JS

&lt;element>.appendChild(&lt;movedElement>);
// &lt;element>.insertAdjacentHTML("beforeEnd", "&lt;htmlString>");

Children

From jQuery

$(&lt;element>).children();

to Vanilla JS

&lt;element>.children;

Clone

From jQuery

$(&lt;element>).clone();

to Vanilla JS

&lt;element>.cloneNode(true);

Compare

From jQuery

var $a = $(&lt;element>).find(&lt;otherElement>);
    $b = $(&lt;otherElement>);

$a.is($b);

to Vanilla JS

var temp = document.getElementsByTagName(&lt;element>)[0],
    a = temp.getElementsByTagName(&lt;otherElement>)[0],
    b = document.querySelector(&lt;otherElement>);

(a === b);

Contains

From jQuery

$.contains(&lt;element>, &lt;childrenElements>);

to Vanilla JS

(&lt;element> !== &lt;childrenElements>) && &lt;element>.contains(&lt;childrenElements>);

Empty

From jQuery

$(&lt;element>).empty();

to Vanilla JS

&lt;element>.innerHTML = "";

Filter

From jQuery

$(&lt;element>).filter(function (i, element) {
    return &lt;filterCondition>;
}).each(function (i, element) {
    element;
});

to Vanilla JS

var elements = document.querySelectorAll(&lt;element>);

elements = [].filter.call(elements, function (element) {
    return &lt;filterCondition>;
});

[].forEach.call(elements, function (element) {
    element;
});

Find Children

From jQuery

$(&lt;element>).find(&lt;childrenElements>);

to Vanilla JS

&lt;element>.querySelectorAll(&lt;childrenElements>);

Get Attributes

From jQuery

$(&lt;element>).attr(&lt;attributeName>);

to Vanilla JS

&lt;element>.getAttribute(&lt;attributeName>);

Get HTML

From jQuery

$(&lt;element>).html();

to Vanilla JS

&lt;element>.innerHTML;

Get Node HTML

From jQuery

$("&lt;div>").append($(&lt;element>).clone()).html();

to Vanilla JS

&lt;element>.outerHTML;

Get Style

From jQuery

$(&lt;element>).css(&lt;property>);

to Vanilla JS

getComputedStyle(&lt;element>)[&lt;property>];

Get Text

From jQuery

$(&lt;element>).text();

to Vanilla JS

&lt;element>.textContent;

Has Class

From jQuery

$(&lt;element>).hasClass(&lt;className>);

to Vanilla JS

&lt;element>.classList.contains(&lt;className>);

Insert After

From jQuery

$(&lt;element>).after(&lt;htmlString>);

to Vanilla JS

&lt;element>.insertAdjacentHTML("afterend", &lt;htmlString>);

Insert Before

From jQuery

$(&lt;element>).before(&lt;htmlString>);

to Vanilla JS

&lt;element>.insertAdjacentHTML("beforebegin", &lt;htmlString>);

Matches Selector

From jQuery

$(&lt;element>).is(&lt;selector>);

to Vanilla JS

&lt;element>.matches(&lt;selector>);

Next

From jQuery

$(&lt;element>).next();

to Vanilla JS

&lt;element>.nextElementSibling;

Offset from Document

From jQuery

$(&lt;element>).offset();

to Vanilla JS

var rect = &lt;element>.getBoundingClientRect()
{
    top: rect.top + document.body.scrollTop,
    left: rect.left + document.body.scrollLeft
}

Offset from Parent

From jQuery

$(&lt;element>).position();

to Vanilla JS

{
    left: &lt;element>.offsetLeft,
    top: &lt;element>.offsetTop
}

Offset from Viewport

From jQuery

$(&lt;element>).offset();

to Vanilla JS

var rect = &lt;element>.getBoundingClientRect()
{
    top: rect.top + document.body.scrollTop,
    left: rect.left + document.body.scrollLeft
}

Outer Height

From jQuery

$(&lt;element>).outerHeight();

to Vanilla JS

&lt;element>.offsetHeight

Outer Width

From jQuery

$(&lt;element>).outerWidth();

to Vanilla JS

&lt;element>.offsetWidth

Parent

From jQuery

$(&lt;element>).parent();

to Vanilla JS

&lt;element>.parentNode;

Parent Not Static

From jQuery

$(&lt;element>).offsetParent();

to Vanilla JS

(&lt;element>.offsetParent || &lt;element>)

Prepend

From jQuery

$(&lt;element>).prepend(&lt;movedElement>);

to Vanilla JS

&lt;element>.insertBefore(&lt;movedElement>, &lt;element>.firstChild);
// &lt;element>.insertAdjacentHTML("afterBegin", "&lt;htmlString>");

Prev

From jQuery

$(&lt;element>).prev();

to Vanilla JS

&lt;element>.previousElementSibling;

Remove Class

From jQuery

$(&lt;element>).remove();

to Vanilla JS

&lt;element>.parentNode.removeChild(&lt;element>);

Remove Class

From jQuery

$(&lt;element>).removeClass(&lt;className>);

to Vanilla JS

&lt;element>.classList.remove(&lt;className>);

Set Attributes

From jQuery

$(&lt;element>).attr(&lt;attributeName>, &lt;value>);

to Vanilla JS

&lt;element>.setAttribute(&lt;attributeName>, &lt;value>);

Set HTML

From jQuery

$(&lt;element>).html(&lt;htmlString>);

to Vanilla JS

&lt;element>.innerHTML = &lt;htmlString>;

Set Node HTML

From jQuery

$(&lt;element>).replaceWith(&lt;htmlString>);

to Vanilla JS

&lt;element>.outerHTML = &lt;htmlString>;

Set Style

From jQuery

$(&lt;element>).css(&lt;property>, &lt;value>);

to Vanilla JS

&lt;element>.style.&lt;property> = &lt;value>;

Set Text

From jQuery

$(&lt;element>).text(&lt;string>);

to Vanilla JS

&lt;element>.textContent = &lt;string>;

Siblings

From jQuery

$(&lt;element>).siblings();

to Vanilla JS

[].filter.call(&lt;element>.parentNode.children, function (element) {
    return element !== &lt;element>;
});

Toggle Class

From jQuery

$(&lt;element>).toggleClass(&lt;className>);

to Vanilla JS

&lt;element>.classList.toggle(&lt;className>);

EVENTS

Load

From jQuery

$(window).load(function () {
    // I am full loaded.
});

to Vanilla JS

window.addEventListener("load", function () {
    // I am full loaded.
});

Off

From jQuery

$(&lt;element>).off(&lt;eventName>, &lt;eventHandler>);

to Vanilla JS

&lt;element>.removeEventListener(&lt;eventName>, &lt;eventHandler>);

On

From jQuery

$(&lt;element>).on(&lt;eventName>, &lt;eventHandler>);

to Vanilla JS

&lt;element>.addEventListener(&lt;eventName>, &lt;eventHandler>);

Ready

From jQuery

$(document).ready(function () {
    // I am ready to be manipulate.
});

to Vanilla JS

document.addEventListener("DOMContentLoaded", function () {
    // I am ready to be manipulate.
});

Trigger

From jQuery

var event = jQuery.Event("click");
event.test = true;

$(&lt;element>).click(function (event) {
    event.test; // undefined by click, true by trigger.
});
$(&lt;element>).trigger(event);
// $(&lt;element>).trigger("click"); // Shortcut without test property.

to Vanilla JS

var event = document.createEvent("HTMLEvents");
event.initEvent("click", true, false);
event.test = true;

&lt;element>.addEventListener("click", function (event) {
    event.test; // undefined by click, true by trigger.
});
&lt;element>.dispatchEvent(event);

UTILS

Array Each

From jQuery

$.each(&lt;array>, function (i, item) {
    (item === array[i]); // true
});

to Vanilla JS

&lt;array>.forEach(function (item, i) {
    (item === array[i]); // true
});

Change Futur Context

From jQuery

$.proxy(&lt;fn>, &lt;context>);

to Vanilla JS

&lt;fn>.bind(&lt;context>);

Extend

From jQuery

$.isArray(&lt;array>);

to Vanilla JS

function extend(first) {
    var extended = first || {};

    for (var i = 1; i < arguments.length; i++) {
        if (!arguments[i]) {
            continue;
        }

        for (var key in arguments[i]) {
            if (arguments[i].hasOwnProperty(key)) {
                extended[key] = arguments[i][key];
            }
        }
    }

    return extended;
}

var object = extend(&lt;object1>, &lt;object2> ..., &lt;objectN>)

Index Of

From jQuery

$.inArray(&lt;item>, &lt;array>);

to Vanilla JS

[].indexOf(&lt;item>);

Is Array

From jQuery

$.isArray(&lt;array>);

to Vanilla JS

Array.isArray(&lt;array>);

Map

From jQuery

$.map(&lt;array>, function (item, i) {
    return &lt;operations>;
});

to Vanilla JS

&lt;array>.map(function (item, i) {
    return &lt;operations>;
});

Now

From jQuery

$.now();

to Vanilla JS

Date.now();

Parse HTML

From jQuery

$.parseHTML(&lt;htmlString>);

to Vanilla JS

function parseHTML(htmlString) {
    var body = document.implementation.createHTMLDocument().body;
    body.innerHTML = htmlString;
    return body.children;
}

parseHTML(&lt;htmlString>);

Parse JSON

From jQuery

$.parseJSON(&lt;jsonString>);

to Vanilla JS

JSON.parse(&lt;jsonString>);

Trim

From jQuery

$.trim(&lt;string>);

to Vanilla JS

&lt;string>.trim();

About

Vanilla JS is a fast, lightweight, cross-platform framework for building incredible, powerful JavaScript applications.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published