Skip to content

Instantly share code, notes, and snippets.

@RhythmShahriar
Created July 12, 2017 02:59
Show Gist options
  • Save RhythmShahriar/617a13cb4b823f84dbe5f1ee661d5ca6 to your computer and use it in GitHub Desktop.
Save RhythmShahriar/617a13cb4b823f84dbe5f1ee661d5ca6 to your computer and use it in GitHub Desktop.
This is a collection of Vanilla JavaScript equivalents to jQuery methods.
/**
* This is a collection of Vanilla JavaScript
* equivalents to jQuery methods.
*
* @author Rhythm Shahriar <[email protected]>
* @link http://rhythmshahriar.com
*/
/**----------------------------------------------------------------------
* DOM selectors
*----------------------------------------------------------------------*/
document.querySelectorAll('.item'); /* $('.item'); */
/*----------- Specific -----------*/
var parent = document.getElementById('parent');
var child = parent.getElementsByClassName('child');
/**----------------------------------------------------------------------
* DOM traversing
*----------------------------------------------------------------------*/
document.querySelector('.item').parentNode; /* $('.item').parentNode(); */
document.querySelector('.item').children; /* $('.item').children(); */
document.querySelector('.item').firstElementChild; /* $('.item').children().first(); */
document.querySelector('.item').lastElementChild; /* $('.item').children().last(); */
document.querySelector('.item').nextElementSibling; /* $('.item').next(); */
document.querySelector('.item').previousElementSibling; /* $('.item').prev();*/
/**----------------------------------------------------------------------
* DOM manipulation
*----------------------------------------------------------------------*/
/*----------- Append -----------*/
var node = document.createElement('p'); /* $('.item').append('<p>Text</p>');*/
node.appendChild(document.createTextNode('Text'));
document.querySelector('.item').appendChild(node);
/*----------- Before & after -----------*/
document.querySelector('.item').insertAdjacentHTML('beforebegin', '<p>Text</p>'); /* $('.item').before('<p>Text</p>'); */
document.querySelector('.item').insertAdjacentHTML('afterend', '<p>Text</p>'); /*$('.item').after('<p>Text</p>'); */
/*----------- Manage HTML content -----------*/
document.querySelector('.item').innerHTML = null; /* $('.item').empty(); */
document.querySelector('.item').innerHTML = '<p>Text</p>'; /* $('.item').html('<p>Text</p>'); */
/*----------- Manage text content -----------*/
document.querySelector('.item').textContent; /* $('.item').text(); */
document.querySelector('.item').textContent = 'Text'; /* $('.item').text('Text'); */
/*----------- Remove HTML element -----------*/
var element = document.querySelector('.item'); /* $('.item').remove();*/
element.parentNode.removeChild(element);
/**----------------------------------------------------------------------
* Check if element is empty
*----------------------------------------------------------------------*/
if (!document.querySelector('.item').hasChildNodes()); /* if ($('.item').is(':empty')); */
/**----------------------------------------------------------------------
* HTML attributes
*----------------------------------------------------------------------*/
/*----------- Managing attributes -----------*/
document.querySelector('.home').getAttribute('href'); /* $('.home').attr('href'); */
document.querySelector('.home').setAttribute('href', 'http://rhythmshahriar.com'); /*$('.home').attr('href', 'http://rhythmshahriar.com'); */
/*----------- Managing attributes -----------*/
document.querySelector('img').naturalWidth; /* $('.item').addClass('active'); */
document.querySelector('img').naturalHeight; /* $('img').naturalHeight; */
/**----------------------------------------------------------------------
* Managing classes
*----------------------------------------------------------------------*/
document.querySelector('.item').classList.add('active'); /* $('.item').addClass('active'); */
document.querySelector('.item').classList.remove('active'); /* $('.item').removeClass('active'); */
document.querySelector('.item').classList.toggle('active'); /* $('.item').toggleClass('active'); */
document.querySelector('.item').classList.contains('active'); /* $('.item').hasClass('active'); */
/*----------- Managing attributes -----------*/
document.querySelector('.item').className = 'active';
document.querySelector('.item').className += ' active';
/*----------- Easiest :: Helper function -----------*/
function hasClass(el, cl) {
return el.className && new RegExp("(\\s|^)" + cl + "(\\s|$)").test(el.className);
}
function addClass(el, cl) {
if (!hasClass(el, cl)) { el.className += ' ' + cl; }
}
function removeClass(el, cl) {
var reg = new RegExp("(\\s|^)" + cl + "(\\s|$)");
el.className = el.className.replace(reg, " ").replace(/(^\s*)|(\s*$)/g,"");
}
function toggleClass(el, cl) {
if (hasClass(el, cl)) { removeClass(el, cl); } else { addClass(el, cl); }
}
/*----------- Call :: Helper function -----------*/
hasClass(document.querySelector('.item'), 'active'); /* $('.item').hasClass('active'); */
addClass(document.querySelector('.item'), 'active'); /* $('.item').addClass('active'); */
removeClass(document.querySelector('.item'), 'active'); /* $('.item').removeClass('active'); */
toggleClass(document.querySelector('.item'), 'active'); /* $('.item').toggleClass('active'); */
/**----------------------------------------------------------------------
* Styles
*----------------------------------------------------------------------*/
/*----------- Change style -----------*/
document.querySelector('.item').style.display = 'none'; /* $('.item').hide(); */
document.querySelector('.item').style.display = ''; /* $('.item').show(); */
document.querySelector('.item').style.borderWidth = '1px'; /* $('.item').css('border-width', '1px'); */
/*----------- Get style -----------*/
var element = document.querySelector('.item'); /* $('.item').css(display); */
getComputedStyle(element)[display];
/*----------- Get position -----------*/
document.querySelector('.item').offsetLeft; /* $('.item').position().left; */
document.querySelector('.item').offsetTop; /* $('.item').position().top; */
/**----------------------------------------------------------------------
* Events
*----------------------------------------------------------------------*/
/*----------- Click -----------*/
/* $('.item').on('click', function(e) { ... }); */
var elements = document.querySelectorAll('.item');
for (var i = 0; i < elements.length; i++) {
elements[i].addEventListener('click', function(e) {
//...
}, false);
}
/*----------- Ready -----------*/
/* $(document).ready(function(){ ... }); */
document.addEventListener('DOMContentLoaded', function() {
//...
}, false);
/*----------- Custom event -----------*/
/* $('.item').trigger('foo'); */
var element = document.querySelector('.item');
var foo = new Event('customEvent');
element.addEventListener('customEvent', function (e) {
//...
}, false);
element.dispatchEvent(foo);
/**----------------------------------------------------------------------
* Helpers
*----------------------------------------------------------------------*/
/*----------- Each -----------*/
/* $('.item').each(function(i, el){ ... }); */
var elements = document.querySelectorAll('.item');
for (var i = 0; i < elements.length; i++) {
//...
}
/**----------------------------------------------------------------------
* Trim whitespace
*----------------------------------------------------------------------*/
/* $.trim(' string '); */
var string = ' string ';
string.trim();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment