I will go straight to the issue first concept: I want a div to be created once a user press an icon in a certain area of the html. my most achieving is that the div get created but I want the creation to be index specific instead it goes to the bottom of the Li list which has some other items also I was able to show it inside the li element as well but it doesn’t sere my purpose I want the div to appear right under the li element that has the icon that has been just clicked matching this patter
// if first icon clicked the UI must look like following Ul LI Div Are you sure ??? LI LI UL
any idea ? thanks for help.
function removeDay() { // Select all trash cans let trash = document.getElementsByClassName('fa-trash-alt'); let divs = document.getElementsByClassName("day-row"); //Foorloop all trash cans on visible elemenst for (let i = 0, len = trash.length; i < len; i++) { (function(index) { trash[i].onclick = function() { //new div should apper under the the li element asking you if you are cool with delete const areYouSure = `<div class="areYouSure faderin"> <p>Are you sure ?</p> <span>Yes</span> <span>No</span> </div>` this.parentElement.parentElement.innerHTML += areYouSure; // if user select yes then do the folowing // if user selen no then don't do anything //alert(index); Helpfull !! //setting timeout for the emlement to remove element an effect //setTimeout(function () { divs[i].style.display = "none"; }, 2000); //setTimeout(function () { divs[i].classList.add("faderclick") }, 1000);*/ } })(i); } } removeDay()
<li id="Days" class="day-row"> <div class="dayFunction"> <i class="fas fa-trash-alt"></i> <i class="fas fa-archive"></i> </div> </li> <li id="Days" class="day-row"> <div class="dayFunction"> <i class="fas fa-trash-alt"></i> <i class="fas fa-archive"></i> </div> </li> <li id="Days" class="day-row"> <div class="dayFunction"> <i class="fas fa-trash-alt"></i> <i class="fas fa-archive"></i> </div> </li>
Advertisement
Answer
You could achieve your goal through CSS, so i added to your original divs a display style as a flexbox by using style attribute style="display:flex;"
and set the message div to margin-left with 1rem, using style="margin-left:1rem;"
so you can have your message in the same line beside your icons with 1rem gap.
Try the snippet, best of luck =)
EDIT : As per your request, appended the message to the <li>
and added display:inline; to the div to keep showing in the same line.
Also added a console log check for the first <li>
function removeDay() { // Select all trash cans let trash = document.getElementsByClassName('fa-trash-alt'); let divs = document.getElementsByClassName("day-row"); //Foorloop all trash cans on visible elemenst for (let i = 0, len = trash.length; i < len; i++) { (function(index) { trash[i].onclick = function() { //new div should apper under the the li element asking you if you are cool with delete const areYouSure = `<div class="areYouSure faderin" style="display:inline;margin-left:1rem;"> Are you sure ? <span>Yes</span> <span>No</span> </span>` this.parentElement.outerHTML += areYouSure; console.log(document.querySelector('li').innerHTML); // if user select yes then do the folowing // if user selen no then don't do anything //alert(index); Helpfull !! //setting timeout for the emlement to remove element an effect //setTimeout(function () { divs[i].style.display = "none"; }, 2000); //setTimeout(function () { divs[i].classList.add("faderclick") }, 1000);*/ } })(i); } } removeDay()
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css"> <script src='https://kit.fontawesome.com/a076d05399.js'></script> <li id="Days" class="day-row" style="display:flex;"> <div class="dayFunction"> <i class="fas fa-trash-alt"></i> <i class="fas fa-archive"></i> </div> </li> <li id="Days" class="day-row" style="display:flex;"> <div class="dayFunction"> <i class="fas fa-trash-alt"></i> <i class="fas fa-archive"></i> </div> </li> <li id="Days" class="day-row" style="display:flex;"> <div class="dayFunction"> <i class="fas fa-trash-alt"></i> <i class="fas fa-archive"></i> </div> </li>