Skip to content

turbo/zQuery

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 

Repository files navigation

z(ero)Query

What is zQuery

zQuery is a cheatsheet for

  • Vanilla JS alternatives to common jQuery constructs, and
  • neat JS hacks in general.

You can share this repo here as git.io/zQuery.

Contribute

If you know some neat JS hacks, feel free to send a PR. Hardly anything is too crazy as long as it's useful. zQuery already contains all of youdontneedjquery.

Contents

  1. AJAX GET
  2. AJAX POST
  3. Bind
  4. DOM Ready
  5. DOM Query
  6. Element Attributes
  7. Element Childs
  8. Element Child Manipulation
  9. Element Class
  10. Element Content
  11. Element Data Attributes
  12. Element Foreach
  13. Element Filters
  14. Element Find
  15. Element Listeners
  16. Element Parent
  17. Element Siblings
  18. Element Sibling Navigation
  19. Element Styles
  20. Element Value
  21. Element Visibility
  22. Window (Viewport) Dimensions

AJAX GET

jQuery

$.get(
  'path/to/json',
  data => {/* use 'data' here */}
).error(
  error => {/* use 'error' here */}
);

JavaScript (+fetch, +Promise)

fetch('/path/to/json')
.then(response => response.json())
.then(data   => {/* use 'data' here */})
.catch(error => {/* use 'error' here */});

AJAX POST

jQuery

$.post(
  'https://example.com/api',
  JSON.stringify(myObjectHere),
  data => {/* use 'data' here */ }
).error(
  error => {/* use 'error' here */}
);

JavaScript (+fetch, +Promise)

fetch('path/to/whatever', {
  method: 'POST',
  headers: new Headers({ 'Content-Type': 'application/json' }),
  body: JSON.stringify(myObjectHere)
})
.then(response => response.json())
.then(data   => {/* use 'data' here */})
.catch(error => {/* use 'error' here */}
);

Bind

jQuery

$(".foo").bind("contextmenu", function (event) { /* do something */ });
$(".foo").click(function (event) { /* do something */ });

JavaScript

document.querySelector(".foo").addEventListener("contextmenu", function (event) { /* do something */ });
document.querySelector(".foo").addEventListener('click', function() { /* do something */ });

DOM Ready

jQuery

$(document).ready(function() {
  alert("DOM ready.");
});

JavaScript (old)

function onDOMReady(f){/in/.test(document.readyState)?setTimeout(arguments.callee.name+'('+f+')',9):f()}

onDOMReady(function(){
  alert("DOM ready.");
});

This is faster than other JS (intrinsic) functions, but still slower than just putting the JS at the end of your HTML file. Further, this works in IE8, whereas other solutions don't.

JavaScript (HTML5)

document.addeventListener('DOMContentLoaded', () => {
  alert("DOM ready.");
});

DOM Query

jQuery

const myElement = $('.foo');

JavaScript

const myElement          = document.querySelector('.foo');
const myMultipleElements = document.querySelectorAll('.foo');

Element Attributes

jQuery

const foo = $(myElement).attr('foo');
$(myElement).attr('bar', foo);

JavaScript

const foo = myElement.getAttribute('foo');
myElement.setAttribute('bar', foo);

Element Childs

jQuery

$(myElement).children();

JavaScript

myElement.children;

Element Child Manipulation

jQuery

$(myElement).append(anotherElement);
$(myElement).prepend(anotherElement);
$(myElement).remove();

JavaScript

myElement.appendChild(anotherElement);
myElement.insertBefore(anotherElement, myElement.firstChild);
myElement.remove();

Element Class

jQuery

$(myElement).addClass('foo');
$(myElement).removeClass('foo');
$(myElement).toggleClass('foo');

JavaScript

myElement.classList.add('foo');
myElement.classList.remove('foo');
myElement.classList.toggle('foo');

Element Content

jQuery

$(myElement).text('lorem ispum');
$(myElement).html('<span>lorem ipsum</span>');

JavaScript

myElement.textContent = 'lorem ipsum';
myElement.innerHTML = '<span>lorem ipsum</span>';

Element Data Attributes

jQuery

$(myElement).data('foo', 'bar');

JavaScript

myElement.dataset.foo = 'bar';

Element Foreach

jQuery

$(myMultipleElements).each((i, x) => {/* use 'x' here */});

JavaScript

Array.from(myMultipleElements).forEach((x, i) => {/* use 'x' here */});

Element Filters

jQuery

$(myMultipleElements).filter('.some-class-here');

JavaScript

[...myMultipleElements].filter(x => x.classList.contains('some-class-here'));

Element Find

jQuery

const x = $(myElement).find('.foo');
const y = $(myMultipleElements).find('.foo');

JavaScript

const x = myElement.querySelectorAll('.foo');
const y = [...myMultipleElements].map(x => [...x.querySelectorAll('.foo')]).reduce((a, b) => [...a, ...b]);

Element Listeners

jQuery

$(myElement).on('click', myEventHandler);
$(myElement).off('click', myEventHandler);

JavaScript

myElement.addEventListener('click', myEventHandler);
myElement.removeEventListener('click', myEventHandler);

Element Parent

jQuery

$(myElement).parent();
$(myMultipleElements).parents('.foo'); // all parents

JavaScript

myElement.parentElement;
[...myMultipleElements].map(x => x.closest('.foo')); // all parents

Element Siblings

jQuery

$(myElement).siblings();

JavaScript

[...myElement.parentElement.children].filter(x => x !== myElement);

Element Sibling Navigation

jQuery

$(myElement).next();
$(myElement).prev();

JavaScript

myElement.nextElementSibling;
myElement.previousElementSibling;

Element Styles

jQuery

$(myElement).css({ background: 'red', color: 'white' });

JavaScript

Object.assign(myElement.style, { background: 'red', color: 'white' });
// or
myElement.style.background = 'red';
myElement.style.color = 'white';

Element Value

jQuery

const value = $(myElement).val();
$(myElement).val('foo');

JavaScript

const value = myElement.value;
myElement.value = 'foo';

Element Visibility

jQuery

$(myElement).hide();
$(myElement).show();

JavaScript

myElement.style.display = 'none';
myElement.style.display = null;

Window (Viewport) Dimensions

jQuery

var height = $(window).height();   
var width = $(window).width();   

JavaScript

var width = window.innerWidth   || document.documentElement.clientWidth  || document.body.clientWidth;
var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;

About

Pure JavaScript alternatives to jQuery things.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published