You are on page 1of 10

<!

DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DOM Manipulation</title>
<link rel="stylesheet" href="https://stackedit.io/style.css" />
</head>

<body class="stackedit">
<div class="stackedit__html"><h2 id="dom-manipulation">DOM Manipulation</h2>
<p><strong>Pre-Requisites:</strong><br>
For the rest of this cheatsheet, I will assume that you know HTML at an
intermediate level and understand CSS to some degree.</p>
<p><strong>What is the DOM?</strong><br>
<code>DOM</code> stands for <em>Document Object Model</em>. Basically, in the DOM,
the <em>whole</em> HTML structure of the webpage is referred to as the
<code>document</code> and each <em>HTML element</em> inside the <em>document</em>
is an <code>object</code>.</p>
<p><strong>How to manipulate HTML Elements?</strong><br>
We can do all sorts of things to HTML Elements including changing their inside
text, modifying the HTML contained within them, changing their attributes, changing
their styles etc.<br>
But to do all do this we must first access the element. Suppose we have the
following <em>HTML body structure:</em></p>
<pre class=" language-html"><code class="prism language-html"><span class="token
comment">&lt;!--example 1.1--&gt;</span>

<span class="token tag"><span class="token tag"><span class="token


punctuation">&lt;</span>html</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>head</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>head</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>body</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span
class="token attr-value"><span class="token punctuation">=</span><span class="token
punctuation">"</span>container<span class="token punctuation">"</span></span> <span
class="token attr-name">id</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>container-1<span
class="token punctuation">"</span></span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;</span>ul</span> <span class="token attr-
name">class</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>list<span class="token
punctuation">"</span></span> <span class="token attr-name">id</span><span
class="token attr-value"><span class="token punctuation">=</span><span class="token
punctuation">"</span>list-1<span class="token punctuation">"</span></span><span
class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;</span>li</span> <span class="token attr-
name">class</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>list-item<span
class="token punctuation">"</span></span> <span class="token
attr-name">id</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>list-item-1<span
class="token punctuation">"</span></span><span class="token
punctuation">&gt;</span></span>
List Item 1
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;/</span>li</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;</span>li</span> <span class="token attr-
name">class</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>list-item<span
class="token punctuation">"</span></span> <span class="token
attr-name">id</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>list-item-3<span
class="token punctuation">"</span></span><span class="token
punctuation">&gt;</span></span>
List Item 2
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;/</span>li</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;</span>li</span> <span class="token attr-
name">class</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>list-item<span
class="token punctuation">"</span></span> <span class="token
attr-name">id</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>list-item-3<span
class="token punctuation">"</span></span><span class="token
punctuation">&gt;</span></span>
List Item 3
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;/</span>li</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;/</span>ul</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>div</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>body</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>html</span><span class="token
punctuation">&gt;</span></span>
</code></pre>
<p>We can access the elements in one of a few ways:</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
comment">//example 1.1</span>

<span class="token keyword">const</span> container <span class="token


operator">=</span> document<span class="token punctuation">.</span><span
class="token function">getElementById</span><span class="token
punctuation">(</span><span class="token string">"container-1"</span><span
class="token punctuation">)</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>container<span
class="token punctuation">)</span> <span class="token comment">// &lt;div
class="container" id="container-1"&gt;&lt;/div&gt;</span>

<span class="token keyword">const</span> list <span class="token operator">=</span>


document<span class="token punctuation">.</span><span class="token
function">getElementsByClassName</span><span class="token
punctuation">(</span><span class="token string">"list"</span><span class="token
punctuation">)</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>list<span class="token
punctuation">)</span> <span class="token comment">// [&lt;ul class="list" id="list-
1"&gt;&lt;/ul&gt;]</span>

<span class="token keyword">const</span> listItems <span class="token


operator">=</span> document<span class="token punctuation">.</span><span
class="token function">getElementByTagName</span><span class="token
punctuation">(</span><span class="token string">"li"</span><span class="token
punctuation">)</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>listItems<span
class="token punctuation">)</span> <span class="token comment">// [&lt;li
class="list-item" id="list-item-1"&gt;List Item 1&lt;/li&gt;...]</span>
</code></pre>
<p>Each DOM operation has a <code>parentNode</code> on which it acts. Here, we are
accessing elements from the whole document so, we prefix with
<code>document</code>.<br>
If we wanted to access elements that exist within a certain <code>node</code> we
would prefix with that <code>node</code> . <code>node</code> for all we care means
any <code>HTML Element</code> e.g.</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
comment">//example 1.2</span>

<span class="token keyword">const</span> parent <span class="token


operator">=</span> document<span class="token punctuation">.</span><span
class="token function">getElementById</span><span class="token
punctuation">(</span><span class="token string">"parent"</span><span class="token
punctuation">)</span>
<span class="token keyword">const</span> children <span class="token
operator">=</span> parent<span class="token punctuation">.</span><span class="token
function">getElementsByClassName</span><span class="token
punctuation">(</span><span class="token string">"children"</span><span class="token
punctuation">)</span>

console<span class="token punctuation">.</span><span class="token


function">log</span><span class="token punctuation">(</span>children<span
class="token punctuation">)</span> <span class="token comment">// [...] all
children nodes of the parent node</span>
</code></pre>
<p>Notice in <code>JS exmaple 1.1</code> that, since <code>id</code> is a unique
identifier, and one id corresponds to <em>one and only one</em> element,
<code>getElementById()</code> returns only one element whereas, since
<code>class</code> and <code>tag</code> can refer to multiple elements,
<code>getElementsByClassName()</code> and <code>getElementsByTagName()</code>
return <em>arrays</em>.</p>
<p>However, all these techniques for accessing elements are considered <em>bad
practice</em> since they are hard to read and take too long to type. Additionally,
<code>getElementsByClassName()</code> and <code>getElementsByTagName()</code>
return <em>arrays</em> and if we only need the first element we must access
<code>[0]</code> of the array. But, there’s another way which is recommended and
should be used which is:</p>
<pre class=" language-html"><code class="prism language-html"><span class="token
comment">&lt;!--example 1.3--&gt;</span>

<span class="token tag"><span class="token tag"><span class="token


punctuation">&lt;</span>html</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>head</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>head</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>body</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span
class="token attr-value"><span class="token punctuation">=</span><span class="token
punctuation">"</span>parent<span class="token punctuation">"</span></span> <span
class="token attr-name">id</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>parent-1<span
class="token punctuation">"</span></span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;</span>div</span> <span class="token attr-
name">class</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>child<span
class="token punctuation">"</span></span> <span class="token
attr-name">id</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>child-1<span
class="token punctuation">"</span></span><span class="token
punctuation">&gt;</span></span><span class="token tag"><span class="token
tag"><span class="token punctuation">&lt;/</span>div</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;</span>div</span> <span class="token attr-
name">class</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>child<span
class="token punctuation">"</span></span> <span class="token
attr-name">id</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>child-2<span
class="token punctuation">"</span></span><span class="token
punctuation">&gt;</span></span><span class="token tag"><span class="token
tag"><span class="token punctuation">&lt;/</span>div</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;</span>div</span> <span class="token attr-
name">class</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>child<span
class="token punctuation">"</span></span> <span class="token
attr-name">id</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>child-3<span
class="token punctuation">"</span></span><span class="token
punctuation">&gt;</span></span><span class="token tag"><span class="token
tag"><span class="token punctuation">&lt;/</span>div</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span
class="token punctuation">&lt;</span>div</span> <span class="token attr-
name">class</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>child<span
class="token punctuation">"</span></span> <span class="token
attr-name">id</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>child-4<span
class="token punctuation">"</span></span><span class="token
punctuation">&gt;</span></span><span class="token tag"><span class="token
tag"><span class="token punctuation">&lt;/</span>div</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>div</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>body</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>html</span><span class="token
punctuation">&gt;</span></span>
</code></pre>
<pre class=" language-js"><code class="prism language-js"><span class="token
keyword">const</span> parent <span class="token operator">=</span> document<span
class="token punctuation">.</span><span class="token
function">querySelector</span><span class="token punctuation">(</span><span
class="token string">".parent"</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> children <span class="token
operator">=</span> document<span class="token punctuation">.</span><span
class="token function">querySelectorAll</span><span class="token
punctuation">(</span><span class="token string">".child"</span><span class="token
punctuation">)</span>
<span class="token keyword">const</span> child1 <span class="token
operator">=</span> document<span class="token punctuation">.</span><span
class="token function">querySelector</span><span class="token
punctuation">(</span><span class="token string">".child"</span><span class="token
punctuation">)</span>

console<span class="token punctuation">.</span><span class="token


function">log</span><span class="token punctuation">(</span>parent<span
class="token punctuation">)</span> <span class="token comment">//&lt;div
class="parent" id="parent-1"&gt;&lt;/div&gt; (first element that corresponds with
the given selector string)</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>children<span
class="token punctuation">)</span><span class="token comment">//[...] (array of all
elements with the child class)</span>
console<span class="token punctuation">.</span><span class="token
function">log</span><span class="token punctuation">(</span>child1<span
class="token punctuation">)</span><span class="token comment">// &lt;div
class="child" id="child-1"&gt;&lt;/div&gt; (first element that corresponds with the
given selector string)</span>
</code></pre>
<p><code>.querySelector()</code> and <code>.querySelectorAll()</code>, instead of
taking in classes or ids, take in <code>CSS selectors</code>. Anything that is a
valid CSS selector will work (<em>Yes Any!</em>). <code>.querySelector()</code>
returns the first element that matches the given selector. While,
<code>.querySelectorAll()</code> returns a list of all elements that satisfy the
given condition.</p>
<p>Now that we have learnt about accessing, let’s move on to manipulation! This is
a very vast topic and requires ages to master. Teaching it, will probably be easier
by example. So let’s go through the making of a project that involves DOM
Manipulation. The prompt for the project is:</p>
<blockquote>
<p>Make a webpage that has a button. Each time, this button is pressed, increment
the counter displayed on screen.</p>
</blockquote>
<p><strong>Project 1</strong></p>
<p><em>New Topics Covered</em>:</p>
<ul>
<li><code>.addEventListener()</code></li>
<li><code>.innerText</code></li>
<li><code>.textContent</code></li>
</ul>
<p><em>HTML:</em><br>
The HTML code for this site is pretty simple. Here is what the body looks like:</p>
<pre class=" language-html"><code class="prism language-html"><span class="token
comment">&lt;!--project 1--&gt;</span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span
class="token attr-value"><span class="token punctuation">=</span><span class="token
punctuation">"</span>container<span class="token punctuation">"</span></span><span
class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span
class="token attr-value"><span class="token punctuation">=</span><span class="token
punctuation">"</span>counter<span class="token punctuation">"</span></span><span
class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>h2</span> <span class="token attr-name">class</span><span
class="token attr-value"><span class="token punctuation">=</span><span class="token
punctuation">"</span>counter-count<span class="token punctuation">"</span></span>
<span class="token attr-name">data-count</span><span class="token
punctuation">&gt;</span></span>0<span class="token tag"><span class="token
tag"><span class="token punctuation">&lt;/</span>h2</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>div</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span
class="token attr-value"><span class="token punctuation">=</span><span class="token
punctuation">"</span>button-container<span class="token
punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;</span>button</span> <span class="token
attr-name">class</span><span class="token attr-value"><span class="token
punctuation">=</span><span class="token punctuation">"</span>button<span
class="token punctuation">"</span></span> <span class="token attr-name">data-
button</span><span class="token punctuation">&gt;</span></span>
Click To Increment
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>button</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>div</span><span class="token
punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token
punctuation">&lt;/</span>div</span><span class="token
punctuation">&gt;</span></span>
</code></pre>
<p>We’ll be using custom attributes to access the elements. To give custom
attributes to elements, we prefix the attribute name by <code>data-</code> as shown
above in the example (<code>data-count</code>, <code>data-button</code>). We’ll
access these elements in JS using the standard CSS protocol i.e. by surrounding the
attribute’s name in square brackets e.g. <code>[data-button]</code>. Here is what
it looks like so far:</p>
<p><img src="http://js-course-images.000.pe/page.png" alt="Project 1 with Basic
HTML"></p>
<p><em>CSS</em><br>
Here’s some basic styling to make it look pretty:</p>
<pre class=" language-css"><code class="prism language-css"><span class="token
selector">*, *<span class="token pseudo-element">::before</span>, *<span
class="token pseudo-element">::after</span></span><span class="token
punctuation">{</span>
<span class="token property">margin</span><span class="token
punctuation">:</span><span class="token number">0</span><span class="token
punctuation">;</span>
<span class="token property">padding</span><span class="token
punctuation">:</span><span class="token number">0</span><span class="token
punctuation">;</span>
<span class="token property">font-family</span><span class="token
punctuation">:</span>Poppins, sans-serif<span class="token punctuation">;</span>
<span class="token property">box-sizing</span><span class="token
punctuation">:</span>border-box<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector">html, body</span><span class="token


punctuation">{</span>
<span class="token property">width</span><span class="token punctuation">:</span>
<span class="token number">100%</span><span class="token punctuation">;</span>
<span class="token property">height</span><span class="token
punctuation">:</span> <span class="token number">100%</span><span class="token
punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token selector">body</span><span class="token punctuation">{</span>
<span class="token property">background</span><span class="token
punctuation">:</span> <span class="token hexcode">#2A2438</span><span class="token
punctuation">;</span>
<span class="token property">color</span><span class="token punctuation">:</span>
<span class="token hexcode">#DBD8E3</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token selector"><span class="token
class">.counter-count</span></span><span class="token punctuation">{</span>
<span class="token property">font-size</span><span class="token
punctuation">:</span><span class="token number">5</span>rem<span class="token
punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token selector"><span class="token
class">.container</span></span><span class="token punctuation">{</span>
<span class="token property">width</span><span class="token punctuation">:</span>
<span class="token number">100%</span><span class="token punctuation">;</span>
<span class="token property">height</span><span class="token
punctuation">:</span> <span class="token number">100%</span><span class="token
punctuation">;</span>
<span class="token property">display</span><span class="token
punctuation">:</span> flex<span class="token punctuation">;</span>
<span class="token property">flex-direction</span><span class="token
punctuation">:</span> column<span class="token punctuation">;</span>
<span class="token property">justify-content</span><span class="token
punctuation">:</span> center<span class="token punctuation">;</span>
<span class="token property">align-items</span><span class="token
punctuation">:</span> center<span class="token punctuation">;</span>
<span class="token property">gap</span><span class="token
punctuation">:</span><span class="token number">2</span>rem<span class="token
punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.button</span></span><span


class="token punctuation">{</span>
<span class="token property">background</span><span class="token
punctuation">:</span> <span class="token hexcode">#DBD8E3</span><span class="token
punctuation">;</span>
<span class="token property">font-size</span><span class="token
punctuation">:</span><span class="token number">1.2</span>rem<span class="token
punctuation">;</span>
<span class="token property">padding</span><span class="token
punctuation">:</span><span class="token number">0.5</span>em <span class="token
number">1</span>em<span class="token punctuation">;</span>
<span class="token property">color</span><span class="token punctuation">:</span>
<span class="token hexcode">#2A2438</span><span class="token punctuation">;</span>
<span class="token property">border</span><span class="token
punctuation">:</span> <span class="token hexcode">#5C5470</span> <span class="token
number">0.1</span>em solid<span class="token punctuation">;</span>
<span class="token property">border-radius</span><span class="token
punctuation">:</span><span class="token number">0.175</span>em<span class="token
punctuation">;</span>
<span class="token property">transition</span><span class="token
punctuation">:</span> <span class="token number">0.15</span>s ease-out<span
class="token punctuation">;</span>
<span class="token property">cursor</span><span class="token
punctuation">:</span>pointer<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token selector"><span class="token class">.button</span><span
class="token pseudo-class">:hover</span>, <span class="token
class">.button</span><span class="token pseudo-class">:focus</span></span><span
class="token punctuation">{</span>
<span class="token property">background</span><span class="token
punctuation">:</span> <span class="token hexcode">#352F44</span><span class="token
punctuation">;</span>
<span class="token property">color</span><span class="token
punctuation">:</span><span class="token hexcode">#DBD8E3</span><span class="token
punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Here’s what it looks like now:</p>
<p><img src="http://js-course-images.000.pe/page-with-css.png" alt="Project 1 with
CSS"></p>
<p>Enough styling, let’s get into functionality. First off, let’s get access to the
DOM Elements we’ll be needing.</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
keyword">const</span> button <span class="token operator">=</span> document<span
class="token punctuation">.</span><span class="token
function">querySelector</span><span class="token punctuation">(</span><span
class="token string">"[data-button]"</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> count <span class="token
operator">=</span> document<span class="token punctuation">.</span><span
class="token function">querySelector</span><span class="token
punctuation">(</span><span class="token string">"[data-count]"</span><span
class="token punctuation">)</span>
</code></pre>
<p><code>"[data-button]"</code> and <code>"[data-count]"</code> are standard CSS
selectors to select elements by their attributes (<code>[attribute-name]</code>).
We used <code>.querySelector()</code> instead of <code>.querySelectorAll()</code>
because we only needed the first element which satisfied the conditions (because
their is only one of each on the page).<br>
Now, Here’s an interesting problem. <em>How do we know when the button is clicked?
</em>. Well, for that we have a handy method which is available on every <em>DOM
node</em> i.e. it is available for <code>document</code> and all elements we get
using <code>.querySelector()</code> etc. This method is
<code>.addEventListener()</code>. As the name suggests, it adds a <em>listener</em>
which <em>listens</em> for a particular event and then performs a given action. It
takes arguments as: <code>.addEventListener(eventType, function, options)</code>.
<code>options</code> is an <em>optional</em> argument and is not required so we’ll
ignore it for now. <code>eventType</code> is the type of the event we need to
listen to. It includes <code>"click"</code>, <code>"submit"</code>,
<code>"mouseover"</code>, <code>"change"</code>, <code>"DOMContentLoaded"</code>
etc. For a complete list see: <a
href="https://developer.mozilla.org/en-US/docs/Web/Events#event_listing">Full List
Of Events</a>. The <code>function</code> parameter takes in a function as its
argument and performs this function when that event occurs. The occurring of the
event is known as <em>firing of the event</em>.</p>
<pre class=" language-js"><code class="prism language-js">button<span class="token
punctuation">.</span><span class="token function">addEventListener</span><span
class="token punctuation">(</span><span class="token string">"click"</span><span
class="token punctuation">,</span> <span class="token punctuation">(</span><span
class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span
class="token punctuation">{</span>
<span class="token comment">//code to run when the event fires comes here
</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre>
<p>Now what do we do when the event fires? Well, we must increment the counter. So
we can make a global variable <code>clickCount</code> that keeps track of the
amount of times the button is pressed. Each time the button is pressed, we update
this variable and set the count element to show its value. We do that by setting
the <code>.innerText</code> of the element. We can also use
<code>.textContent</code> which is better. Thus, the full code becomes:</p>
<pre class=" language-js"><code class="prism language-js"><span class="token
keyword">const</span> button <span class="token operator">=</span> document<span
class="token punctuation">.</span><span class="token
function">querySelector</span><span class="token punctuation">(</span><span
class="token string">"[data-button]"</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> count <span class="token
operator">=</span> document<span class="token punctuation">.</span><span
class="token function">querySelector</span><span class="token
punctuation">(</span><span class="token string">"[data-count]"</span><span
class="token punctuation">)</span>
<span class="token keyword">let</span> clickCount <span class="token
operator">=</span> <span class="token number">0</span>

button<span class="token punctuation">.</span><span class="token


function">addEventListener</span><span class="token punctuation">(</span><span
class="token string">"click"</span><span class="token punctuation">,</span> <span
class="token punctuation">(</span><span class="token punctuation">)</span> <span
class="token operator">=&gt;</span> <span class="token punctuation">{</span>
clickCount<span class="token operator">++</span>
count<span class="token punctuation">.</span>textContent <span class="token
operator">=</span> clickCount
<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre>
<p>You can view a working example at: <a
href="https://codepen.io/as_2022/pen/eYQBqmN?editors=1000">Project 1
Complete</a></p>
</div>
</body>

</html>

You might also like