|
<h1 id="vanilla-js-basics">Vanilla JS Basics</h1>
|
|
<p>
|
|
<em>Warning: This article turned out to be a bit of rant. So if you are the type to get offended when I say negative things
|
|
about JavaScript, you are welcome to leave.</em>
|
|
</p>
|
|
<p>JavaScript is what I consider to be an "easy" language. Now what do I mean by that? Well, its usually the first
|
|
<em>scripting</em> language that new developers learn, and you can get started with very little "training". It
|
|
has a relatively simple syntax. It can be very powerful. So from my point of view, its an easy language to pick up. And
|
|
therein lies the problem.</p>
|
|
<p>So many of the JavaScript programmers out there today hear the term "JavaScript" and think in there mind "jQuery".
|
|
Now that's great to have that kind of brand recognition if you are jQuery, but if you are looking to be an efficient
|
|
programmer that doesn't put holes in everything you make, you may want to consider that JavaScript is NOT jQuery.</p>
|
|
<p>Additionally, we need to start thinking about the consequences of using third-party libraries for everything. Longer load
|
|
times, additional security risks, more memory consumption, and the list goes on.</p>
|
|
<p>I want to give you at least a few little snippets of vanilla JavaScript that will get you on your way to not importing jQuery
|
|
on every project as a
|
|
<em>step 1</em>. It should be near the end of your steps and only as needed.</p>
|
|
<p>
|
|
<em>Disclaimer: Vanilla JavaScript will be longer (i.e. more verbose), but this isn't always a bad thing. Keep in mind that
|
|
we are eliminating the import of another package, and all the bloat that comes with it.</em>
|
|
</p>
|
|
<h2 id="assumptions">Assumptions</h2>
|
|
<p>For starters, I'm assuming that you getting this far means that you at least have heard of JavaScript. If you have not heard
|
|
of jQuery,
|
|
<strong>leave now</strong>, I don't want "introducing someone to jQuery" to be what you get out of this.</p>
|
|
<p>Let's begin...</p>
|
|
<h3 id="selecting-element-in-the-dom">Selecting Element in the DOM</h3>
|
|
<p>jQuery</p>
|
|
<pre><code> $('#myID')
|
|
</code></pre>
|
|
<p>Vanilla JavaScript</p>
|
|
<pre><code> document.getElementById('myID')
|
|
</code></pre>
|
|
<p>Again, note that vanilla JavaScript is longer, but its actually more descriptive of what is going on here. Unless you are
|
|
familiar with jQuery (yes, I know you are) the jQuery syntax doesn't tell you what its doing.</p>
|
|
<h3 id="replace-text-html-in-the-dom">Replace Text/HTML in the DOM</h3>
|
|
<p>jQuery</p>
|
|
<pre><code> $('#myID').html('here is the replacement')
|
|
</code></pre>
|
|
<p>Vanilla JavaScript</p>
|
|
<pre><code> document.getElementById('myID').innerHTML('here is the replacement')
|
|
</code></pre>
|
|
<p>Very similar eh. However, there is actually some performance gain by using vanilla JavaScript. See
|
|
<a href="https://stackoverflow.com/questions/3563107/jquery-html-vs-innerhtml#answer-3563136">here</a>.</p>
|
|
<h3 id="click-handling-in-the-dom">Click Handling in the DOM</h3>
|
|
<p>jQuery</p>
|
|
<pre><code> $('#myID').click(function() {
|
|
alert('Clicked it!')
|
|
})
|
|
</code></pre>
|
|
<p>Vanilla JavaScript</p>
|
|
<pre><code> document.getElementById('myID').addEventListener('click', function(e) {
|
|
alert('Clicked it!')
|
|
})
|
|
</code></pre>
|
|
<p>So easy.</p>
|
|
<h3 id="advanced-queries-and-iteration">Advanced Queries and Iteration</h3>
|
|
<p>jQuery</p>
|
|
<pre><code> $('.item').hide()
|
|
</code></pre>
|
|
<p>Vanilla JavaScript</p>
|
|
<pre><code> var items = document.getElementsByClassName('.items')
|
|
for (var i = 0; i < items.length; i++) {
|
|
item[i].style.display = 'none'
|
|
}
|
|
</code></pre>
|
|
<p>We're starting to see the verbosity I mentioned above, but again, remember that we aren't loading in a massive third-party
|
|
library!</p>
|
|
<h3 id="even-more-advanced">Even More Advanced</h3>
|
|
<p>See Patrick Kunka's article
|
|
<a href="https://blog.wearecolony.com/a-year-without-jquery/">A Year Without jQuery</a>
|
|
</p>
|
|
<p>Patrick and I agree on many of the same points and his article articulates some helper functions that can be used to perform
|
|
more advanced loops, child selection and child indexing. I highly recommend you read through his article.</p>
|
|
<h2 id="conclusion">Conclusion</h2>
|
|
<p>If you find that your requirements heavily rely on JavaScript for DOM manipulation, or that you need animations such as the
|
|
ones provided by jQuery, then don't let me stop you. But if you only need some of what was covered above, or you want
|
|
to put a priority on performance, then you should really consider going with plain vanilla JavaScript and leave the dependencies
|
|
behind. You won't regret it.</p>
|