Created
July 12, 2017 02:59
-
-
Save RhythmShahriar/617a13cb4b823f84dbe5f1ee661d5ca6 to your computer and use it in GitHub Desktop.
This is a collection of Vanilla JavaScript equivalents to jQuery methods.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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