{"componentChunkName":"component---src-templates-blog-post-js","path":"/selector-vs-getElement/","result":{"data":{"site":{"siteMetadata":{"title":"Noah's Web Dev Notes"}},"markdownRemark":{"id":"9c3fdaf6-8dd3-5053-a5b7-9a4d3a2a3d39","excerpt":"The JavaScript querySelector() method lets you retrieve an element from the DOM, or the web page, using a CSS selector. This method comes with a sister function…","html":"<p>The JavaScript <strong>querySelector()</strong> method lets you retrieve an element from the DOM, or the web page, using a CSS selector. This method comes with a sister function called <strong>querySelectorAll()</strong> which selects all the elements that match a particular selector from the DOM.</p>\n<p>The <strong>getElementById()</strong> method, on the other hand, retrieves an element based on its ID attribute, hence the name. This method is more restrictive than querySelector because you can only retrieve elements based on their particular ID.</p>\n<h2>getElementById</h2>\n<p>Syntax:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">element <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Returns a reference to the element by its ID. If the element with the specified ID is not in the document, it will returns null.</p>\n<h2>querySelector</h2>\n<p>Syntax:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">element <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelector</span><span class=\"token punctuation\">(</span>selectors<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Returns the first element within the document that matches the specified group of selectors, or null if no matches are found.</p>\n<h2>Difference between them</h2>\n<p>Both of these functions are very similar in what they can do in term of DOM manipulation, but getXXXByXX function returns element <strong>dynamically</strong>, while querySelector returns element <strong>statistically</strong>.</p>\n<p>See example below :</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\">    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span>111<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span>222<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span>333<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>If we use querySelector to manipulation it :</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">var</span> ul<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\">'ul'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">var</span> list<span class=\"token operator\">=</span>ul<span class=\"token punctuation\">.</span><span class=\"token function\">querySelectorAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">'li'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">for</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">var</span> i<span class=\"token operator\">=</span><span class=\"token number\">0</span><span class=\"token punctuation\">;</span>i<span class=\"token operator\">&lt;</span>list<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span>i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            ul<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'li'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token comment\">//now it create 3 new li and append them into ul</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>list<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span> <span class=\"token comment\">//however, the result is still 3, not 6</span></code></pre></div>\n<p>On the other hand, if we use selectorElementById :</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">var</span> ul<span class=\"token operator\">=</span>document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementsByTagName</span><span class=\"token punctuation\">(</span><span class=\"token string\">'ul'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">var</span> list<span class=\"token operator\">=</span>ul<span class=\"token punctuation\">.</span><span class=\"token function\">getElementsByTagName</span><span class=\"token punctuation\">(</span><span class=\"token string\">'li'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">for</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">var</span> i<span class=\"token operator\">=</span><span class=\"token number\">0</span><span class=\"token punctuation\">;</span>i<span class=\"token operator\">&lt;</span>list<span class=\"token punctuation\">.</span>lenth<span class=\"token punctuation\">;</span>i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            ul<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'li'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>   \n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>list<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span><span class=\"token comment\">// The result will be 6, not 3</span></code></pre></div>\n<h2>Performance</h2>\n<p>Lone story short, getElementById is faster than querySelector.</p>","frontmatter":{"title":"getElementById vs querySelector","date":"December 03, 2020","description":null}},"previous":{"fields":{"slug":"/why-redux/"},"frontmatter":{"title":"Why using redux in react?"}},"next":{"fields":{"slug":"/var-let-const/var-let-const/"},"frontmatter":{"title":"Difference between var, const and let?"}}},"pageContext":{"id":"9c3fdaf6-8dd3-5053-a5b7-9a4d3a2a3d39","previousPostId":"01301ac3-a252-5a49-8256-2231145abbfa","nextPostId":"d422e799-3251-5f86-900c-35e0e0b2f3ab"}},"staticQueryHashes":["2841359383","3257411868"]}