<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Roman Yurchenko</title>
    <description>The latest articles on DEV Community by Roman Yurchenko (@romannet77).</description>
    <link>https://dev.to/romannet77</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F991112%2F6a34b028-09e8-4317-bc22-653ad9704d07.jpeg</url>
      <title>DEV Community: Roman Yurchenko</title>
      <link>https://dev.to/romannet77</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/romannet77"/>
    <language>en</language>
    <item>
      <title>Creating HTML Elements using insertAdjacentHTML() method in JavaScript</title>
      <dc:creator>Roman Yurchenko</dc:creator>
      <pubDate>Sun, 01 Jan 2023 22:24:36 +0000</pubDate>
      <link>https://dev.to/romannet77/creating-html-elements-using-insertadjacenthtml-method-10ka</link>
      <guid>https://dev.to/romannet77/creating-html-elements-using-insertadjacenthtml-method-10ka</guid>
      <description>&lt;p&gt;We wil use the &lt;strong&gt;insertAdjacentHTML()&lt;/strong&gt; method to create HTML elements and add them to the DOM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;element.insertAdjacentHTML(position, stringHtml)&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;element&lt;/strong&gt; is the existing HTML element, relative to which we are adding the new HTML element that we create.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;position&lt;/strong&gt; parameter indicates where exactly we insert the new created HTML.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;stringHtml&lt;/strong&gt; paramater is this new HTML element that we create. The type of stringHtml parameter is a string which contains HTML code.&lt;/p&gt;

&lt;p&gt;For example, we can use the &lt;strong&gt;insertAdjacentHTML()&lt;/strong&gt; method to add new &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; elements to the parent &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; HTML element that already contains three existing &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; elements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funx0ynhl50k2vm4sxb4y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funx0ynhl50k2vm4sxb4y.jpg" alt="Image description" width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We create the followig JavaScript code to do it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ul = document.querySelector(".ul-insert- 
  html-example");

const li = `&amp;lt;li&amp;gt;element added by 
  &amp;lt;span&amp;gt;JavaScript&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;`;

ul.insertAdjacentHTML("afterbegin", li);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And we have the result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54clywgimipdx8s73ant.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54clywgimipdx8s73ant.jpg" alt="Image description" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can use the following parameters to insert the created HTML element:&lt;/p&gt;

&lt;p&gt;"&lt;strong&gt;afterbegin&lt;/strong&gt;", "&lt;strong&gt;beforeend&lt;/strong&gt;", "&lt;strong&gt;beforebegin&lt;/strong&gt;", "&lt;strong&gt;afterend&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;"&lt;strong&gt;afterbegin&lt;/strong&gt;" - "responses" for inserting created HTML element before the first child element of the parent element:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7azigu08dgp027s9letv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7azigu08dgp027s9letv.jpg" alt="Image description" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"&lt;strong&gt;beforeend&lt;/strong&gt;" - "responses" for inserting created HTML element after the last child element of the parent element:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7c250trna62qus344vq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7c250trna62qus344vq.jpg" alt="Image description" width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"&lt;strong&gt;beforebegin&lt;/strong&gt;" - "responses" for inserting created HTML element before its parent element:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfm5c5is7141saz0tlbl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfm5c5is7141saz0tlbl.jpg" alt="Image description" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"&lt;strong&gt;afterend&lt;/strong&gt;" -"responses" for inserting created HTML element after its parent element:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpr6fv1w8r2obpqhitw4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpr6fv1w8r2obpqhitw4.jpg" alt="Image description" width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can easily use the &lt;strong&gt;insertAdjacentHTML()&lt;/strong&gt; method for creating and &lt;a href="https://romannet77.github.io/js-event-delegation/" rel="noopener noreferrer"&gt;adding HTML elements dynamically by event&lt;/a&gt;. For example, we want to add new &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; element to the parent &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; element by the click &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; event.&lt;/p&gt;

&lt;p&gt;First of all, let's create the button "Add &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; element" using the the &lt;strong&gt;insertAdjacentHTML()&lt;/strong&gt; method !&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const buttonHtmlElement = 
`&amp;lt;button class="button-add-html-element"&amp;gt;Add &amp;lt;li&amp;gt; 
  element&amp;lt;/button&amp;gt;`;

const ulParentEl = 
 document.querySelector("ul.parent-element-for- 
 button");

ulParentEl.insertAdjacentHTML("beforebegin", 
 buttonHtmlElement);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0d0zjxf63txlaqsovzq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0d0zjxf63txlaqsovzq.jpg" alt="Image description" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we can attach an event handler to the created &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; element:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const button = document.querySelector("button");

const liAddedByClick = `&amp;lt;li&amp;gt;added by click
  &amp;lt;span&amp;gt; class="red-color-text" (JavaScript)&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;`;

button.addEventListener("click", () =&amp;gt; {
   ulParentEl.insertAdjacentHTML( "afterbegin", liAddedByClick);
  }
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So we can add &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; elements by clicking the created button:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3zkgf0m11u2k0hvhvevo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3zkgf0m11u2k0hvhvevo.jpg" alt="Image description" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All that we need to create and add the HTML element to the DOM, using the JavaScript &lt;strong&gt;insertAdjacentHTML()&lt;/strong&gt; method, is:&lt;/p&gt;

&lt;p&gt;1) &lt;strong&gt;Create the HTML element that we need&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const li = `&amp;lt;li&amp;gt;element added by &amp;lt;span&amp;gt;JavaScript&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;;`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) &lt;strong&gt;Choose its parent HTML element&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ul = document.querySelector(".ul-insert-html-example");

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) &lt;strong&gt;Indicate the place where we want to store it&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ul.insertAdjacentHTML("afterbegin", li);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it!  And that is the simplicity and the beauty of the &lt;strong&gt;insertAdjacentHTML()&lt;/strong&gt; method !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://js-event-delegation.netlify.app/" rel="noopener noreferrer"&gt;https://js-event-delegation.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://romannet77.github.io/js-event-delegation/" rel="noopener noreferrer"&gt;https://romannet77.github.io/js-event-delegation/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2022 Written and Developed by Mr. &lt;a href="https://www.linkedin.com/in/roman-yurchenko-89630923b/" rel="noopener noreferrer"&gt;Roman Yurchenko&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>json</category>
    </item>
    <item>
      <title>Binding Event Listeners to Dynamically Created Elements in JavaScript</title>
      <dc:creator>Roman Yurchenko</dc:creator>
      <pubDate>Thu, 15 Dec 2022 22:35:41 +0000</pubDate>
      <link>https://dev.to/romannet77/binding-event-listeners-to-dynamically-created-elements-in-javascript-5ecl</link>
      <guid>https://dev.to/romannet77/binding-event-listeners-to-dynamically-created-elements-in-javascript-5ecl</guid>
      <description>&lt;p&gt;We have the existing &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; HTML elements that contain "programming languages" and buttons "delete" and we can remove any programming language clicking the "delete" button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BJTCnLqr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x1vq27mti7l3lnd1mm10.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BJTCnLqr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x1vq27mti7l3lnd1mm10.jpg" alt="Image description" width="880" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can add dynamically created &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; elements with "Frameworks" and buttons "delete" by "click" or "keypress" events using input value.&lt;/p&gt;

&lt;p&gt;To create and add new &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; HTML elemenets dynamically the &lt;a href="https://romannet77.github.io/JavaScript-insertAdjacentHTML-method/"&gt;insertAdjacentHTML()&lt;/a&gt; JavaScript method was used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
const button = document.querySelector(".button-add-framework");

const input = document.querySelector("#input-value");

const ul = document.querySelector("ul");

/*Add an element at the beginning of the list clicking "Add Framework" button*/

button.addEventListener("click", function () {
  if (input.value !== "") {
    const li = `&amp;lt;li class = "element-list"&amp;gt;${input.value}&amp;lt;span&amp;gt;framework&amp;lt;/span&amp;gt;&amp;lt;button class="btn-delete"&amp;gt;delete&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;`;
    ul.insertAdjacentHTML("afterBegin", li);
    input.value = "";
  }
});

/*Add an element at the beginning of the list pressing key "Enter"*/

input.addEventListener("keypress", function (e) {
  if (e.key === "Enter" &amp;amp;&amp;amp; input.value !== "") {
    const li = `&amp;lt;li class = "element-list"&amp;gt;${input.value}&amp;lt;span&amp;gt;framework&amp;lt;/span&amp;gt;&amp;lt;button class="btn-delete"&amp;gt;delete&amp;lt;/button&amp;gt;&amp;lt;/li&amp;gt;`;
    ul.insertAdjacentHTML("afterBegin", li);

    input.value = "";
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, We can add  Frameworks to our list by entering any Framework and clicking "Add Framework" button:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9sIu1ydj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ym6tte3jug5yvl1tu16c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9sIu1ydj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ym6tte3jug5yvl1tu16c.jpg" alt="Image description" width="880" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We want to remove added &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; element by clicking “delete” button. The problem is that an ordinary code will affect only &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; elements with “programming languages” but the Dynamically Created Elements with “frameworks” will not be affected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const deleteButtons = document.querySelectorAll(".btn-delete");

deleteButtons.forEach((delBtn) =&amp;gt; {
 delBtn.addEventListener("click", () =&amp;gt; {
   delBtn.parentElement.remove();
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, It means that we can delete only “programming languages” but not added “frameworks” by clicking “delete” button !&lt;/p&gt;

&lt;p&gt;To solve this problem and make our new added &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; elements (with “frameworks” and “delete” buttons) clickable, we use &lt;strong&gt;"Event Delegation"&lt;/strong&gt; pattern!&lt;/p&gt;

&lt;p&gt;It means that we are adding handling of the event not directly to our &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; “delete” element but to the &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; element that contains all &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; elements and stands above them in DOM structure. So, We are “catching” an event triggered in our &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; element that matches our selected “delete” &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;  element:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ul = document.querySelector("ul");

ul.addEventListener("click", (event) =&amp;gt; {
  if (event.target.classList.contains("btn-delete")) {
    event.target.parentElement.remove();
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We used the &lt;strong&gt;classList&lt;/strong&gt; property and the &lt;strong&gt;contains()&lt;/strong&gt; method to "catch" the "click" event on the HTML element that we need: &lt;strong&gt;event.target.classList.contains ("btn-delete")&lt;/strong&gt; !&lt;/p&gt;

&lt;p&gt;CONCLUSION:&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;"Event Delegation"&lt;/strong&gt; pattern we can provide an element we need with the event handler, based on the event attached to its parent element or to the element standing higher in the DOM. It allows us to include all Dynamically Created Elements to the list of the event handlers that we need !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://js-event-delegation.netlify.app/"&gt;https://js-event-delegation.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://romannet77.github.io/js-event-delegation/"&gt;https://romannet77.github.io/js-event-delegation/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2022 Written and Developed by Mr. &lt;a href="https://www.linkedin.com/in/roman-yurchenko-89630923b/"&gt;Roman Yurchenko&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
